aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-17 00:29:43 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-17 00:29:43 +0100
commit8bec9a955dba7ef7c178637844887de76590ebe3 (patch)
tree6354ecbef9059e4a7bc3ba71372dea03a866e639 /src/main/java
parent6c5c070b4781ceffc843d72465ac8e928dac5ad3 (diff)
Add LLVM ptrtoint instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java9
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmPtrToInt.java14
3 files changed, 24 insertions, 1 deletions
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 01e7ed32..8555b720 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
@@ -82,6 +82,15 @@ public class LlvmIrSerializer {
builder.append(" ");
serializeOperand(load.pointer(), builder);
}
+ case LlvmPtrToInt ptrToInt -> {
+ serializeVariable(ptrToInt.target(), builder);
+ builder.append(" = ptrtoint ");
+ serializeType(ptrToInt.sourceType(), builder);
+ builder.append(" ");
+ serializeOperand(ptrToInt.value(), builder);
+ builder.append(" to ");
+ serializeType(ptrToInt.targetType(), builder);
+ }
case LlvmStore store -> {
builder.append("store ");
serializeType(store.type(), builder);
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java
index cc316ca0..fda542d4 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.backends.llvm.ir.ast.instructions;
-public sealed interface LlvmInstruction permits LlvmAdd, LlvmCall, LlvmGetElementPtr, LlvmIntToPtr, LlvmLoad, LlvmStore {
+public sealed interface LlvmInstruction permits LlvmAdd, LlvmCall, LlvmGetElementPtr, LlvmIntToPtr, LlvmLoad, LlvmPtrToInt, LlvmStore {
}
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
new file mode 100644
index 00000000..ca836d3c
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmPtrToInt.java
@@ -0,0 +1,14 @@
+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 {
+}