diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-17 20:44:14 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-17 20:44:14 +0100 |
| commit | fa32264f4807c40172f524b9a35d2e2019edc7c2 (patch) | |
| tree | eb04b926067f20e2e7c71e8a2260037c71251d63 /src/main/java | |
| parent | 51f6b88390ce1c028fd1a3163f26620e6be16480 (diff) | |
Use opaque ptr in prttoint instructions
Diffstat (limited to 'src/main/java')
4 files changed, 12 insertions, 11 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java index 71d3cef1..2afcac4a 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java @@ -1,8 +1,6 @@ package org.shedlang.compiler.backends.llvm; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmModule; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmParam; +import org.shedlang.compiler.backends.llvm.ir.ast.*; import org.shedlang.compiler.backends.llvm.ir.ast.instructions.*; import org.shedlang.compiler.backends.llvm.ir.ast.operands.*; import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes; @@ -20,7 +18,7 @@ public class LlvmCompiler { List<Instruction> instructions, TypeInfo typeInfo ) { - var context = LlvmCompilerContext.fromTypeInfo(typeInfo); + var context = defaultContext(typeInfo); for (var instruction : instructions) { context = compileInstruction(instruction, context); } @@ -45,6 +43,15 @@ public class LlvmCompiler { return new LlvmModule(topLevelEntities); } + private static LlvmCompilerContext defaultContext(TypeInfo typeInfo) { + return LlvmCompilerContext.fromTypeInfo(typeInfo) + .addTopLevelEntity(new LlvmFunctionDeclaration( + "shed__runtime__alloc", + LlvmTypes.pointer(LlvmTypes.INT_8), + List.of(new LlvmParam(LlvmTypes.INT_64, "size")) + )); + } + public static LlvmCompilerContext compileInstruction(Instruction instruction, LlvmCompilerContext context) { return switch (instruction) { case CallInstruction call -> { @@ -187,7 +194,6 @@ public class LlvmCompiler { context = context.addInstruction(new LlvmPtrToInt( closureValue, - closureTypes.closurePointer(), closurePointer, LlvmCompilerTypes.VALUE_TYPE )); diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmSizeOf.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmSizeOf.java index d26e8635..53d565f7 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmSizeOf.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmSizeOf.java @@ -35,7 +35,6 @@ public class LlvmSizeOf { .addInstruction( new LlvmPtrToInt( size, - LlvmTypes.pointer(type), sizePtr, LlvmTypes.INT_64 ) 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 0b1ff62b..dd4e2cf1 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 @@ -84,9 +84,7 @@ public class LlvmIrSerializer { } case LlvmPtrToInt ptrToInt -> { serializeVariable(ptrToInt.target(), builder); - builder.append(" = ptrtoint "); - serializeType(ptrToInt.sourceType(), builder); - builder.append(" "); + builder.append(" = ptrtoint ptr "); serializeOperand(ptrToInt.value(), builder); builder.append(" to "); serializeType(ptrToInt.targetType(), builder); diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmPtrToInt.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmPtrToInt.java index ca836d3c..784dcb9b 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmPtrToInt.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmPtrToInt.java @@ -2,12 +2,10 @@ package org.shedlang.compiler.backends.llvm.ir.ast.instructions; import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand; import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariable; -import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypePointer; import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeScalar; public record LlvmPtrToInt( LlvmVariable target, - LlvmTypePointer sourceType, LlvmOperand value, LlvmTypeScalar targetType ) implements LlvmInstruction { |
