aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-04-08 19:03:26 +0100
committerMichael Williamson <mike@zwobble.org>2026-04-08 19:07:06 +0100
commit879826dd5cbbd50314bd89caded240c2b12c156c (patch)
treeee654a279e20b86a0f9bf8a197eb6225a8704450
parent870cbd63018d9e253c476ebe0692fd3c27d9a1d3 (diff)
Add poison as LLVM operand
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPoison.java4
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java9
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java4
5 files changed, 22 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 4508f90b..6a315272 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
@@ -248,6 +248,10 @@ public class LlvmIrSerializer {
writer.append("null");
}
+ case LlvmOperandPoison _ -> {
+ writer.append("poison");
+ }
+
case LlvmOperandStructure structure -> {
writer.append("{");
forEachInterspersed(
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
index 624e6dc0..9ada3b12 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.backends.llvm.ir.ast.operands;
-public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandGetElementPtr, LlvmOperandInt, LlvmOperandNull, LlvmOperandPtrToInt, LlvmOperandStructure, LlvmVariable {
+public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandGetElementPtr, LlvmOperandInt, LlvmOperandNull, LlvmOperandPoison, LlvmOperandPtrToInt, LlvmOperandStructure, LlvmVariable {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPoison.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPoison.java
new file mode 100644
index 00000000..b34cb6a5
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPoison.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.operands;
+
+public record LlvmOperandPoison() implements LlvmOperand {
+}
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java
index 0139599e..ba4ecb93 100644
--- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java
@@ -82,6 +82,15 @@ public class LlvmIrSerializerOperandsTests {
}
@Test
+ public void poisonIsSerializedAsPoison() throws IOException {
+ var operand = LlvmIr.operandPoison();
+
+ var result = serializeToString(operand, LlvmIrSerializer::serializeOperand);
+
+ assertThat(result, equalTo("poison"));
+ }
+
+ @Test
public void arrayIsSerializedAsTypedOperandsInArray() throws IOException {
var operand = LlvmIr.operandArray(
LlvmTypes.INT_64,
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 08a5b706..b1aef1d8 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
@@ -159,6 +159,10 @@ public class LlvmIr {
return new LlvmOperandNull();
}
+ public static LlvmOperandPoison operandPoison() {
+ return new LlvmOperandPoison();
+ }
+
public static LlvmOperand operandPtrToInt(
LlvmOperand operand,
LlvmType destinationType