aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-14 18:40:02 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-14 18:40:02 +0100
commitb91dcea010435d1313f4743a3bb46827081d89c8 (patch)
tree16f84ecfd4e6bf72959b1b3b04f86725c1b051a2 /src/test/java/org
parent78c3d52bc16fefbe35dbceb778f52618078b0854 (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.java31
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java9
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);
+ }
}