aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 21:34:39 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 21:34:39 +0100
commitfa8b7447149e249e2e938757822dee19f569b9b8 (patch)
tree43e22aaf3bdc45e4994419cc3193722e5cd17a4f /src/main/java
parentf0e7b287bb6aa9faf2de68b76889b3fc279e5584 (diff)
Add LLVM operand ptrtoint
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/operands/LlvmOperand.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPtrToInt.java11
3 files changed, 21 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 c9f6b072..caa6c254 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
@@ -71,6 +71,15 @@ public class LlvmIrSerializer {
);
builder.append("}");
}
+ case LlvmOperandPtrToInt ptrToInt -> {
+ builder.append("ptrtoint (");
+ serializeType(ptrToInt.sourceType(), builder);
+ builder.append(" ");
+ serializeOperand(ptrToInt.operand(), builder);
+ builder.append(" to ");
+ serializeType(ptrToInt.targetType(), builder);
+ builder.append(")");
+ }
case LlvmVariable variable -> {
serializeVariable(variable, builder);
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
index 6f53dab1..b53734fd 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.backends.llvm.ir.ast.operands;
-public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandInt, LlvmOperandStructure, LlvmVariable {
+public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandInt, LlvmOperandPtrToInt, LlvmOperandStructure, LlvmVariable {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPtrToInt.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPtrToInt.java
new file mode 100644
index 00000000..0eddc061
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPtrToInt.java
@@ -0,0 +1,11 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.operands;
+
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypePointer;
+
+public record LlvmOperandPtrToInt(
+ LlvmTypePointer sourceType,
+ LlvmOperand operand,
+ LlvmType targetType
+) implements LlvmOperand {
+}