From 106e45c80866713291e6bd013b15b5a595cf22ae Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 12 Jun 2023 23:01:54 +0100 Subject: Support private LLVM globals --- .../compiler/backends/llvm/LlvmCompilerContext.java | 1 + .../backends/llvm/LlvmGlobalDefinitionBuilder.java | 18 ++++++++++++++++++ .../compiler/backends/llvm/ir/LlvmIrSerializer.java | 3 +++ .../backends/llvm/ir/ast/LlvmGlobalDefinition.java | 1 + 4 files changed, 23 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java index 8df90d25..44f14d73 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java @@ -73,6 +73,7 @@ public record LlvmCompilerContext( builder.type().orElseThrow(), builder.value().orElseThrow(), builder.constant(), + builder.isPrivate(), builder.unnamedAddr() ); diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmGlobalDefinitionBuilder.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmGlobalDefinitionBuilder.java index c8a17793..a965bda6 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmGlobalDefinitionBuilder.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmGlobalDefinitionBuilder.java @@ -10,6 +10,7 @@ public record LlvmGlobalDefinitionBuilder( Optional type, Optional value, boolean constant, + boolean isPrivate, boolean unnamedAddr ) { public static LlvmGlobalDefinitionBuilder builder() { @@ -18,6 +19,7 @@ public record LlvmGlobalDefinitionBuilder( Optional.empty(), Optional.empty(), false, + false, false ); } @@ -28,6 +30,7 @@ public record LlvmGlobalDefinitionBuilder( this.type, this.value, this.constant, + this.isPrivate, this.unnamedAddr ); } @@ -38,6 +41,7 @@ public record LlvmGlobalDefinitionBuilder( Optional.of(type), this.value, this.constant, + this.isPrivate, this.unnamedAddr ); } @@ -48,6 +52,7 @@ public record LlvmGlobalDefinitionBuilder( this.type, Optional.of(value), this.constant, + this.isPrivate, this.unnamedAddr ); } @@ -58,6 +63,18 @@ public record LlvmGlobalDefinitionBuilder( this.type, this.value, constant, + this.isPrivate, + this.unnamedAddr + ); + } + + public LlvmGlobalDefinitionBuilder isPrivate(boolean isPrivate) { + return new LlvmGlobalDefinitionBuilder( + this.namePrefix, + this.type, + this.value, + this.constant, + isPrivate, this.unnamedAddr ); } @@ -68,6 +85,7 @@ public record LlvmGlobalDefinitionBuilder( this.type, this.value, this.constant, + this.isPrivate, unnamedAddr ); } 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 caa6c254..cef8f005 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 @@ -117,6 +117,9 @@ public class LlvmIrSerializer { builder.append("@"); builder.append(globalDefinition.name()); builder.append(" = "); + if (globalDefinition.isPrivate()) { + builder.append("private "); + } if (globalDefinition.unnamedAddr()) { builder.append("unnamed_addr "); } 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 index d7adb1e1..68c9cd67 100644 --- 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 @@ -8,6 +8,7 @@ public record LlvmGlobalDefinition( LlvmType type, LlvmOperand value, boolean constant, + boolean isPrivate, boolean unnamedAddr ) implements LlvmTopLevelEntity { } -- cgit v1.2.3