diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-14 18:40:02 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-14 18:40:02 +0100 |
| commit | b91dcea010435d1313f4743a3bb46827081d89c8 (patch) | |
| tree | 16f84ecfd4e6bf72959b1b3b04f86725c1b051a2 /src/test/java/org | |
| parent | 78c3d52bc16fefbe35dbceb778f52618078b0854 (diff) | |
Add LLVM call instruction
Diffstat (limited to 'src/test/java/org')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java | 31 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java | 9 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java index 567bf2b2..f49994f2 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java @@ -26,6 +26,37 @@ public class LlvmIrSerializerInstructionTests { } @Test + public void canSerializeCallWithNoArgs() { + var instruction = LlvmIr.call( + LlvmIr.variableLocal("x"), + LlvmTypes.INT_64, + LlvmIr.variableLocal("f"), + List.of() + ); + + var result = serializeToString(instruction, LlvmIrSerializer::serializeInstruction); + + assertThat(result, equalTo("$x = call i64 $f()")); + } + + @Test + public void canSerializeCallWithArgs() { + var instruction = LlvmIr.call( + LlvmIr.variableLocal("x"), + LlvmTypes.INT_64, + LlvmIr.variableLocal("f"), + List.of( + LlvmIr.typedOperand(LlvmTypes.INT_64, LlvmIr.variableLocal("y")), + LlvmIr.typedOperand(LlvmTypes.INT_32, LlvmIr.variableLocal("z")) + ) + ); + + var result = serializeToString(instruction, LlvmIrSerializer::serializeInstruction); + + assertThat(result, equalTo("$x = call i64 $f(i64 $y, i32 $z)")); + } + + @Test public void getElementPtrIsSerialized() { var instruction = LlvmIr.getElementPtr( LlvmIr.variableLocal("x"), diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java index 774cb031..24a9f44a 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java @@ -103,4 +103,13 @@ public class LlvmIr { public static LlvmVariableLocal variableLocal(String name) { return new LlvmVariableLocal(name); } + + public static LlvmCall call( + LlvmVariable target, + LlvmType returnType, + LlvmOperand functionPointer, + List<LlvmTypedOperand> args + ) { + return new LlvmCall(target, returnType, functionPointer, args); + } } |
