aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-14 19:44:57 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-14 19:44:57 +0100
commitd4a8c7d7cba85e107b8532036b6e6838c57f4e2a (patch)
tree69e870302135959a4ce9d76a26460923efef59a3 /src/main/java
parent2d63d2471c93613172f973521c05086ec1221b4b (diff)
Add LLVM load 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/LlvmLoad.java12
3 files changed, 22 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 ad43e5d8..0c916286 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
@@ -73,6 +73,15 @@ public class LlvmIrSerializer {
builder.append(" to ");
serializeType(intToPtr.targetType(), builder);
}
+ case LlvmLoad load -> {
+ serializeVariable(load.target(), builder);
+ builder.append(" = load ");
+ serializeType(load.type(), builder);
+ builder.append(", ");
+ serializeType(LlvmTypes.pointer(load.type()), builder);
+ builder.append(" ");
+ serializeOperand(load.pointer(), 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 c452e1d7..cc316ca0 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, LlvmStore {
+public sealed interface LlvmInstruction permits LlvmAdd, LlvmCall, LlvmGetElementPtr, LlvmIntToPtr, LlvmLoad, LlvmStore {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmLoad.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmLoad.java
new file mode 100644
index 00000000..6ca6ed2f
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmLoad.java
@@ -0,0 +1,12 @@
+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.LlvmType;
+
+public record LlvmLoad(
+ LlvmVariable target,
+ LlvmType type,
+ LlvmOperand pointer
+) implements LlvmInstruction {
+}