aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-17 21:26:15 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-17 21:26:15 +0100
commit57d65edb3e00191ccc5fae96b347482461a48a6e (patch)
tree856adaa60c3c56be52b63c699d7f61fd84ab09ec /src/main/java
parent5c81b1b587ce4b65da85c2d5aa11d90ba59bc36e (diff)
Extract callAlloc()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java10
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerRuntime.java32
2 files changed, 36 insertions, 6 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java
index 9ee909bb..45b7e920 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java
@@ -100,14 +100,12 @@ public class LlvmCompilerClosures {
var closureSize = closureSizeResult.value();
context = closureSizeResult.context();
- context = context.addInstruction(new LlvmCall(
+ context = LlvmCompilerRuntime.callAlloc(
closurePointer,
closureTypes.closurePointer(),
- new LlvmVariableGlobal("shed__runtime__alloc"),
- List.of(
- new LlvmTypedOperand(LlvmTypes.INT_64, closureSize)
- )
- ));
+ closureSize,
+ context
+ );
context = storeClosureFunctionPointer(
closurePointer,
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerRuntime.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerRuntime.java
new file mode 100644
index 00000000..2a9d842a
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerRuntime.java
@@ -0,0 +1,32 @@
+package org.shedlang.compiler.backends.llvm;
+
+import org.shedlang.compiler.backends.llvm.ir.ast.instructions.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.operands.LlvmVariableGlobal;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes;
+
+import java.util.List;
+
+public class LlvmCompilerRuntime {
+ private LlvmCompilerRuntime() {
+ }
+
+ public static LlvmCompilerContext callAlloc(
+ LlvmVariable target,
+ LlvmType type,
+ LlvmOperand size,
+ LlvmCompilerContext context
+ ) {
+ return context.addInstruction(new LlvmCall(
+ target,
+ type,
+ new LlvmVariableGlobal("shed__runtime__alloc"),
+ List.of(
+ new LlvmTypedOperand(LlvmTypes.INT_64, size)
+ )
+ ));
+ }
+}