aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 23:01:54 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 23:01:54 +0100
commit106e45c80866713291e6bd013b15b5a595cf22ae (patch)
tree813a49e4e1d0dd9396ec3b371424434e387f420a /src/main/java
parent7820f289bee49a8e748f63c04e85566c907f6c6f (diff)
Support private LLVM globals
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java1
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmGlobalDefinitionBuilder.java18
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java3
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.java1
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 {
}