From d4a8c7d7cba85e107b8532036b6e6838c57f4e2a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 14 Jun 2023 19:44:57 +0100 Subject: Add LLVM load instruction --- .../shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java | 9 +++++++++ .../backends/llvm/ir/ast/instructions/LlvmInstruction.java | 2 +- .../compiler/backends/llvm/ir/ast/instructions/LlvmLoad.java | 12 ++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmLoad.java (limited to 'src/main/java') 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 ad43e5d8..0c916286 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 @@ -73,6 +73,15 @@ public class LlvmIrSerializer { builder.append(" to "); serializeType(intToPtr.targetType(), builder); } + case LlvmLoad load -> { + serializeVariable(load.target(), builder); + builder.append(" = load "); + serializeType(load.type(), builder); + builder.append(", "); + serializeType(LlvmTypes.pointer(load.type()), builder); + builder.append(" "); + serializeOperand(load.pointer(), builder); + } case LlvmStore store -> { builder.append("store "); serializeType(store.type(), builder); diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java index c452e1d7..cc316ca0 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java @@ -1,4 +1,4 @@ package org.shedlang.compiler.backends.llvm.ir.ast.instructions; -public sealed interface LlvmInstruction permits LlvmAdd, LlvmCall, LlvmGetElementPtr, LlvmIntToPtr, LlvmStore { +public sealed interface LlvmInstruction permits LlvmAdd, LlvmCall, LlvmGetElementPtr, LlvmIntToPtr, LlvmLoad, LlvmStore { } diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmLoad.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmLoad.java new file mode 100644 index 00000000..6ca6ed2f --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmLoad.java @@ -0,0 +1,12 @@ +package org.shedlang.compiler.backends.llvm.ir.ast.instructions; + +import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand; +import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariable; +import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType; + +public record LlvmLoad( + LlvmVariable target, + LlvmType type, + LlvmOperand pointer +) implements LlvmInstruction { +} -- cgit v1.2.3