From 70906ba9e9213391b524260acd653852e9b8f428 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 22 Jan 2024 19:26:59 +0000 Subject: Add LLVM getelementptr operand --- .../llvm/ir/LlvmIrSerializerOperandsTests.java | 21 +++++++++++++++++++++ .../compiler/backends/llvm/ir/ast/LlvmIr.java | 8 ++++++++ 2 files changed, 29 insertions(+) (limited to 'src/test/java') 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 01de20fc..0139599e 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 @@ -30,6 +30,27 @@ public class LlvmIrSerializerOperandsTests { assertThat(result, equalTo("42")); } + @Test + public void getElementPtrIsSerialized() throws IOException { + var operand = LlvmIr.operandGetElementPtr( + LlvmTypes.pointer( + LlvmTypes.array( + 0, + LlvmTypes.structure(List.of(LlvmTypes.INT_64, LlvmTypes.INT_32)) + ) + ), + LlvmIr.variableLocal("y"), + List.of( + LlvmIr.typedOperand(LlvmTypes.INT_64, LlvmIr.operandInt(3)), + LlvmIr.typedOperand(LlvmTypes.INT_32, LlvmIr.operandInt(1)) + ) + ); + + var result = serializeToString(operand, LlvmIrSerializer::serializeOperand); + + assertThat(result, equalTo("getelementptr ([0 x {i64, i32}], ptr %y, i64 3, i32 1)")); + } + @Test public void localVariableIsSerializedWithPercent() throws IOException { var operand = 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 465597d9..a435877b 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 @@ -123,6 +123,14 @@ public class LlvmIr { return new LlvmOperandArray(type, elements); } + public static LlvmOperand operandGetElementPtr( + LlvmTypePointer pointerType, + LlvmOperand pointer, + List indexes + ) { + return new LlvmOperandGetElementPtr(pointerType, pointer, indexes); + } + public static LlvmOperand operandInt(long value) { return new LlvmOperandInt(value); } -- cgit v1.2.3