aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-30 16:35:53 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-30 16:35:53 +0100
commitcc21a3479f84cf7c829303132a68fb802676814f (patch)
tree8ecb3a1de848124910ad5839f05ade9c4b13b939 /src/main/java
parent3b71fb59ab9613d73733d6c82cac8ddd74bb5101 (diff)
Add LLVM alloca instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java7
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmAlloca.java10
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java2
3 files changed, 18 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 033dd062..a68c7039 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
@@ -51,6 +51,13 @@ public class LlvmIrSerializer {
writer.append(", ");
serializeOperand(add.right(), writer);
}
+
+ case LlvmAlloca alloca -> {
+ serializeVariable(alloca.target(), writer);
+ writer.append(" = alloca ");
+ serializeType(alloca.type(), writer);
+ }
+
case LlvmCall call -> {
if (call.target().isPresent()) {
serializeVariable(call.target().get(), writer);
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmAlloca.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmAlloca.java
new file mode 100644
index 00000000..cb9277ad
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmAlloca.java
@@ -0,0 +1,10 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.instructions;
+
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariable;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
+
+public record LlvmAlloca(
+ LlvmVariable target,
+ LlvmType type
+) implements LlvmInstruction {
+}
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 9f55361c..57bccf19 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, LlvmIcmp, LlvmIntToPtr, LlvmLoad, LlvmPhi, LlvmPtrToInt, LlvmStore, LlvmSub, LlvmTrunc, LlvmZext {
+public sealed interface LlvmInstruction permits LlvmAdd, LlvmAlloca, LlvmCall, LlvmGetElementPtr, LlvmIcmp, LlvmIntToPtr, LlvmLoad, LlvmPhi, LlvmPtrToInt, LlvmStore, LlvmSub, LlvmTrunc, LlvmZext {
}