aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-28 22:22:44 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-28 22:22:44 +0000
commitfee65059d0bb21af9dd43b5c8cfbf06354d61040 (patch)
treec40439220a55575b687b68b41d1774fc812be7e8 /src/main/java
parentbf5db6e008e37cb9049737d7cf49e26934ab5506 (diff)
Simplify generation of call to alloc
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java
index a5d31993..1c31f3e9 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java
@@ -23,6 +23,12 @@ import java.util.Optional;
import java.util.stream.StreamSupport;
public class LlvmPatioCodeGen {
+ private static final LlvmFunctionDeclaration ALLOC_DECLARATION = new LlvmFunctionDeclaration(
+ "shed__runtime__alloc",
+ LlvmTypes.pointer(LlvmTypes.INT_8),
+ List.of(new LlvmParam(LlvmTypes.INT_64, "size"))
+ );
+
private static final LlvmType EXCEPTION_TAG_TYPE = LlvmTypes.INT_32;
private static final LlvmType EXCEPTION_VALUE_TYPE = LlvmTypes.INT_64;
@@ -74,6 +80,7 @@ public class LlvmPatioCodeGen {
public static LlvmModule generateCompilationUnit(PatioCompilationUnit patioCompilationUnit) {
var context = ModuleContext.EMPTY
+ .addTopLevelEntity(ALLOC_DECLARATION)
.addTopLevelEntity(SETJMP_DECLARATION)
.addTopLevelEntity(EXCEPTION_HANDLER_DECLARATION)
.addTopLevelEntity(EXCEPTION_VALUE_DECLARATION)
@@ -111,12 +118,6 @@ public class LlvmPatioCodeGen {
context = generateCompilationUnitElement(patioCompilationUnitElement, context);
}
- context = context.addTopLevelEntity(new LlvmFunctionDeclaration(
- "shed__runtime__alloc",
- LlvmTypes.pointer(LlvmTypes.INT_8),
- List.of(new LlvmParam(LlvmTypes.INT_64, "size"))
- ));
-
return context.toModule();
}
@@ -251,13 +252,9 @@ public class LlvmPatioCodeGen {
var target = targetResult.value;
context = targetResult.context;
- yield context.addInstruction(new LlvmCall(
- target,
- LlvmTypes.pointer(LlvmTypes.VOID),
- new LlvmVariableGlobal("shed__runtime__alloc"),
- List.of(
- new LlvmTypedOperand(LlvmTypes.INT_64, size)
- )
+ yield context.addInstruction(ALLOC_DECLARATION.call(
+ Optional.of(target),
+ List.of(size)
));
}