From 2d63d2471c93613172f973521c05086ec1221b4b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 14 Jun 2023 19:37:57 +0100 Subject: Add LlvmIntToPtr instruction --- .../llvm/ir/LlvmIrSerializerInstructionTests.java | 14 +++++++++++ .../compiler/backends/llvm/ir/ast/LlvmIr.java | 28 +++++++++++++++------- 2 files changed, 33 insertions(+), 9 deletions(-) (limited to 'src/test/java') 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 f49994f2..a48260e7 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 @@ -78,6 +78,20 @@ public class LlvmIrSerializerInstructionTests { assertThat(result, equalTo("$x = getelementptr [0 x {i64, i32}], ptr $y, i64 3, i32 1")); } + @Test + public void intToPtrIsSerialized() { + var instruction = LlvmIr.intToPtr( + LlvmIr.variableLocal("x"), + LlvmTypes.INT_64, + LlvmIr.variableLocal("y"), + LlvmTypes.pointer(LlvmTypes.INT_8) + ); + + var result = serializeToString(instruction, LlvmIrSerializer::serializeInstruction); + + assertThat(result, equalTo("$x = inttoptr i64 $y to i8 *")); + } + @Test public void storeIsSerialized() { var instruction = LlvmIr.store( 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 24a9f44a..3f65165e 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 @@ -4,6 +4,7 @@ import org.shedlang.compiler.backends.llvm.ir.ast.instructions.*; import org.shedlang.compiler.backends.llvm.ir.ast.operands.*; import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType; import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypePointer; +import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeScalar; import java.util.List; import java.util.Optional; @@ -36,6 +37,15 @@ public class LlvmIr { return new LlvmBasicBlock(Optional.of(name), instructions, terminator); } + public static LlvmCall call( + LlvmVariable target, + LlvmType returnType, + LlvmOperand functionPointer, + List args + ) { + return new LlvmCall(target, returnType, functionPointer, args); + } + public static LlvmGetElementPtr getElementPtr( LlvmVariable target, LlvmTypePointer pointerType, @@ -45,6 +55,15 @@ public class LlvmIr { return new LlvmGetElementPtr(target, pointerType, pointer, indexes); } + public static LlvmIntToPtr intToPtr( + LlvmVariable target, + LlvmTypeScalar sourceType, + LlvmOperand value, + LlvmTypePointer targetType + ) { + return new LlvmIntToPtr(target, sourceType, value, targetType); + } + public static LlvmOperand operandArray( LlvmType type, List elements @@ -103,13 +122,4 @@ public class LlvmIr { public static LlvmVariableLocal variableLocal(String name) { return new LlvmVariableLocal(name); } - - public static LlvmCall call( - LlvmVariable target, - LlvmType returnType, - LlvmOperand functionPointer, - List args - ) { - return new LlvmCall(target, returnType, functionPointer, args); - } } -- cgit v1.2.3