aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-14 23:44:11 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-14 23:44:11 +0100
commitefa34e180428f0161c49cef814aacadbe3e1166d (patch)
treea591edbc1ef11fb2603426aa8111a67bf01a98d6 /src/test/java
parent7e18cdc5a90b2d713af44ee6720bea947988345c (diff)
Add LLVM phi instructions
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java16
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java15
2 files changed, 31 insertions, 0 deletions
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 eb55a95c..83bf54bb 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
@@ -157,6 +157,22 @@ public class LlvmIrSerializerInstructionTests {
}
@Test
+ public void phiIsSerialized() throws IOException {
+ var instruction = LlvmIr.phi(
+ LlvmIr.variableLocal("target"),
+ LlvmTypes.INT_64,
+ List.of(
+ LlvmIr.phiPair(LlvmIr.variableLocal("x1"), LlvmIr.variableLocal("p1")),
+ LlvmIr.phiPair(LlvmIr.variableLocal("x2"), LlvmIr.variableLocal("p2"))
+ )
+ );
+
+ var result = serializeToString(instruction, LlvmIrSerializer::serializeInstruction);
+
+ assertThat(result, equalTo("%target = phi i64 [ %x1, %p1 ], [ %x2, %p2 ]"));
+ }
+
+ @Test
public void ptrToIntIsSerialized() throws IOException {
var instruction = LlvmIr.ptrToInt(
LlvmIr.variableLocal("x"),
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 5d957365..8bd93a6f 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
@@ -134,6 +134,21 @@ public class LlvmIr {
return new LlvmParam(type, name);
}
+ public static LlvmPhi phi(
+ LlvmVariable target,
+ LlvmType type,
+ List<LlvmPhiPair> pairs
+ ) {
+ return new LlvmPhi(target, type, pairs);
+ }
+
+ public static LlvmPhiPair phiPair(
+ LlvmOperand value,
+ LlvmVariableLocal predecessorBasicBlockName
+ ) {
+ return new LlvmPhiPair(value, predecessorBasicBlockName);
+ }
+
public static LlvmPtrToInt ptrToInt(
LlvmVariable target,
LlvmOperand value,