diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-08 11:59:38 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-08 11:59:38 +0100 |
| commit | 5422f950cc5f1e8b591f15b5857be2339f313d63 (patch) | |
| tree | 86f56733ea66151418bf4ab4f87109925162d9d0 /src/test/java | |
| parent | 0231ae54d8f0f776424f1b6cb0c8993f34c53c28 (diff) | |
Add LLVM switch instruction
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerTerminatorInstructionTests.java | 22 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java | 13 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerTerminatorInstructionTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerTerminatorInstructionTests.java index 992fcebe..9c697385 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerTerminatorInstructionTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerTerminatorInstructionTests.java @@ -5,6 +5,7 @@ import org.shedlang.compiler.backends.llvm.ir.ast.LlvmIr; import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes; import java.io.IOException; +import java.util.List; import static org.shedlang.compiler.backends.llvm.ir.LlvmIrSerializerTesting.serializeToString; import static org.zwobble.precisely.AssertThat.assertThat; @@ -30,6 +31,27 @@ public class LlvmIrSerializerTerminatorInstructionTests { } @Test + public void switchIsSerialized() throws IOException { + var instruction = LlvmIr.switch_( + LlvmTypes.INT_64, + LlvmIr.variableLocal("value"), + "otherwise", + List.of( + LlvmIr.switchCase(1, "case1"), + LlvmIr.switchCase(2, "case2") + ) + ); + + var result = serializeToString(instruction, LlvmIrSerializer::serializeTerminatorInstruction); + + assertThat(result, equalTo(""" + switch i64 %value, label %otherwise, [ + i64 1, label %case1 + i64 2, label %case2 + ]""")); + } + + @Test public void unreachableIsSerialized() throws IOException { var instruction = LlvmIr.unreachable(); 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 0da16362..bbf72a3e 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 @@ -190,6 +190,19 @@ public class LlvmIr { return new LlvmSub(target, type, left, right); } + public static LlvmSwitch switch_( + LlvmType valueType, + LlvmOperand value, + String defaultDestLabel, + List<LlvmSwitch.Case> cases + ) { + return new LlvmSwitch(valueType, value, defaultDestLabel, cases); + } + + public static LlvmSwitch.Case switchCase(int value, String destLabel) { + return new LlvmSwitch.Case(value, destLabel); + } + public static LlvmTrunc trunc( LlvmVariable target, LlvmType sourceType, |
