From fa32264f4807c40172f524b9a35d2e2019edc7c2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 17 Jun 2023 20:44:14 +0100 Subject: Use opaque ptr in prttoint instructions --- .../shedlang/compiler/backends/llvm/LlvmCompiler.java | 16 +++++++++++----- .../org/shedlang/compiler/backends/llvm/LlvmSizeOf.java | 1 - .../compiler/backends/llvm/ir/LlvmIrSerializer.java | 4 +--- .../backends/llvm/ir/ast/instructions/LlvmPtrToInt.java | 2 -- 4 files changed, 12 insertions(+), 11 deletions(-) (limited to 'src/main/java') 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 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 { -- cgit v1.2.3