diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-28 22:22:44 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-28 22:22:44 +0000 |
| commit | fee65059d0bb21af9dd43b5c8cfbf06354d61040 (patch) | |
| tree | c40439220a55575b687b68b41d1774fc812be7e8 /src/main/java | |
| parent | bf5db6e008e37cb9049737d7cf49e26934ab5506 (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.java | 23 |
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) )); } |
