aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-17 20:44:14 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-17 20:44:14 +0100
commitfa32264f4807c40172f524b9a35d2e2019edc7c2 (patch)
treeeb04b926067f20e2e7c71e8a2260037c71251d63 /src/main/java
parent51f6b88390ce1c028fd1a3163f26620e6be16480 (diff)
Use opaque ptr in prttoint instructions
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java16
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmSizeOf.java1
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmPtrToInt.java2
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 {