diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-12 23:01:54 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-12 23:01:54 +0100 |
| commit | 106e45c80866713291e6bd013b15b5a595cf22ae (patch) | |
| tree | 813a49e4e1d0dd9396ec3b371424434e387f420a /src/main/java | |
| parent | 7820f289bee49a8e748f63c04e85566c907f6c6f (diff) | |
Support private LLVM globals
Diffstat (limited to 'src/main/java')
4 files changed, 23 insertions, 0 deletions
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<LlvmType> type, Optional<LlvmOperand> 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 { } |
