From b91dcea010435d1313f4743a3bb46827081d89c8 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 14 Jun 2023 18:40:02 +0100 Subject: Add LLVM call instruction --- .../llvm/ir/LlvmIrSerializerInstructionTests.java | 31 ++++++++++++++++++++++ .../compiler/backends/llvm/ir/ast/LlvmIr.java | 9 +++++++ 2 files changed, 40 insertions(+) (limited to 'src/test/java/org') 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 @@ -25,6 +25,37 @@ public class LlvmIrSerializerInstructionTests { assertThat(result, equalTo("$x = add i64 $y, $z")); } + @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( 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 args + ) { + return new LlvmCall(target, returnType, functionPointer, args); + } } -- cgit v1.2.3