aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-08 11:59:38 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-08 11:59:38 +0100
commit5422f950cc5f1e8b591f15b5857be2339f313d63 (patch)
tree86f56733ea66151418bf4ab4f87109925162d9d0 /src/test/java
parent0231ae54d8f0f776424f1b6cb0c8993f34c53c28 (diff)
Add LLVM switch instruction
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerTerminatorInstructionTests.java22
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java13
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,