aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
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/main/java
parent78c3d52bc16fefbe35dbceb778f52618078b0854 (diff)
Add LLVM call instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java12
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmCall.java12
2 files changed, 23 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
index bc23c195..9bceaf45 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
@@ -40,6 +40,18 @@ public class LlvmIrSerializer {
serializeOperand(add.right(), builder);
}
case LlvmCall call -> {
+ serializeVariable(call.target(), builder);
+ builder.append(" = call ");
+ serializeType(call.returnType(), builder);
+ builder.append(" ");
+ serializeOperand(call.functionPointer(), builder);
+ builder.append("(");
+ forEachInterspersed(
+ call.args(),
+ arg -> serializeTypedOperand(arg, builder),
+ () -> builder.append(", ")
+ );
+ builder.append(")");
}
case LlvmGetElementPtr getElementPtr -> {
serializeVariable(getElementPtr.target(), builder);
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmCall.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmCall.java
index 38e9ccb2..4851fc5e 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmCall.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmCall.java
@@ -1,6 +1,16 @@
package org.shedlang.compiler.backends.llvm.ir.ast.instructions;
-public record LlvmCall(
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand;
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmTypedOperand;
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariable;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
+
+import java.util.List;
+public record LlvmCall(
+ LlvmVariable target,
+ LlvmType returnType,
+ LlvmOperand functionPointer,
+ List<LlvmTypedOperand> args
) implements LlvmInstruction {
}