From 57d65edb3e00191ccc5fae96b347482461a48a6e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 17 Jun 2023 21:26:15 +0100 Subject: Extract callAlloc() --- .../backends/llvm/LlvmCompilerClosures.java | 10 +++---- .../backends/llvm/LlvmCompilerRuntime.java | 32 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerRuntime.java (limited to 'src/main/java') 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) + ) + )); + } +} -- cgit v1.2.3