From cc21a3479f84cf7c829303132a68fb802676814f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 30 Jul 2023 16:35:53 +0100 Subject: Add LLVM alloca instruction --- .../backends/llvm/ir/LlvmIrSerializerInstructionTests.java | 12 ++++++++++++ .../org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java | 7 +++++++ 2 files changed, 19 insertions(+) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java index 83bf54bb..17a17343 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java @@ -27,6 +27,18 @@ public class LlvmIrSerializerInstructionTests { assertThat(result, equalTo("%x = add i64 %y, %z")); } + @Test + public void allocaIsSerialized() throws IOException { + var instruction = LlvmIr.alloca( + LlvmIr.variableLocal("x"), + LlvmTypes.INT_64 + ); + + var result = serializeToString(instruction, LlvmIrSerializer::serializeInstruction); + + assertThat(result, equalTo("%x = alloca i64")); + } + @Test public void brIsSerializedWithOperandAndLabels() throws IOException { var instruction = LlvmIr.br( diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java index 49a653c5..3a317c3d 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java @@ -23,6 +23,13 @@ public class LlvmIr { return new LlvmAdd(target, type, left, right); } + public static LlvmAlloca alloca( + LlvmVariable target, + LlvmType type + ) { + return new LlvmAlloca(target, type); + } + public static LlvmBasicBlock basicBlock( List instructions, LlvmTerminatorInstruction terminator -- cgit v1.2.3