From 95b00d8003ac8f801212149b350f36a6649b1b86 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 12 Jun 2023 20:27:43 +0100 Subject: Add global definition --- .../compiler/backends/llvm/ir/LlvmIrSerializer.java | 21 ++++++++++++++++++++- .../backends/llvm/ir/ast/LlvmGlobalDefinition.java | 13 +++++++++++++ .../backends/llvm/ir/ast/LlvmTopLevelEntity.java | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.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 9c6ecc55..4846f7ed 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 @@ -1,6 +1,8 @@ package org.shedlang.compiler.backends.llvm.ir; import org.shedlang.compiler.backends.llvm.ir.ast.LlvmBasicBlock; +import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition; +import org.shedlang.compiler.backends.llvm.ir.ast.LlvmGlobalDefinition; import org.shedlang.compiler.backends.llvm.ir.ast.LlvmParam; import org.shedlang.compiler.backends.llvm.ir.ast.LlvmTopLevelEntity; import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmAdd; @@ -85,7 +87,24 @@ public class LlvmIrSerializer { } public static void serializeTopLevelEntity(LlvmTopLevelEntity entity, StringBuilder builder) { - + switch (entity) { + case LlvmFunctionDefinition functionDefinition -> { + } + case LlvmGlobalDefinition globalDefinition -> { + builder.append("@"); + builder.append(globalDefinition.name()); + builder.append(" = "); + if (globalDefinition.unnamedAddr()) { + builder.append("unnamed_addr "); + } + builder.append(globalDefinition.constant() ? "constant" : "global"); + builder.append(" "); + serializeType(globalDefinition.type(), builder); + builder.append(" "); + serializeOperand(globalDefinition.value(), builder); + builder.append("\n"); + } + } } public static void serializeType(LlvmType type, StringBuilder builder) { diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.java new file mode 100644 index 00000000..d7adb1e1 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.java @@ -0,0 +1,13 @@ +package org.shedlang.compiler.backends.llvm.ir.ast; + +import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand; +import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType; + +public record LlvmGlobalDefinition( + String name, + LlvmType type, + LlvmOperand value, + boolean constant, + boolean unnamedAddr +) implements LlvmTopLevelEntity { +} diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java index 96287920..86b3efc3 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java @@ -1,4 +1,4 @@ package org.shedlang.compiler.backends.llvm.ir.ast; -public sealed interface LlvmTopLevelEntity permits LlvmFunctionDefinition { +public sealed interface LlvmTopLevelEntity permits LlvmFunctionDefinition, LlvmGlobalDefinition { } -- cgit v1.2.3