aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_general.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2025-02-24 14:24:06 +0000
committergingerBill <bill@gingerbill.org>2025-02-24 14:24:06 +0000
commitf0f395c510a7b0c625b0a222d00ddbe4c63a496b (patch)
treedba7354e51da745a655a8c32f590560a55b8e7b0 /src/llvm_backend_general.cpp
parent46a8991d0fae4fb119e9934d62959e5a1729a636 (diff)
Fix canonicalization
Diffstat (limited to 'src/llvm_backend_general.cpp')
-rw-r--r--src/llvm_backend_general.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index 94a9023d1..96572437c 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -2814,6 +2814,32 @@ gb_internal lbAddr lb_add_global_generated(lbModule *m, Type *type, lbValue valu
return lb_addr(g);
}
+gb_internal lbAddr lb_add_global_generated_with_name(lbModule *m, Type *type, lbValue value, String name) {
+ GB_ASSERT(type != nullptr);
+ type = default_type(type);
+
+ isize max_len = 7+8+1;
+ u8 *str = cast(u8 *)gb_alloc_array(permanent_allocator(), u8, max_len);
+
+ Scope *scope = nullptr;
+ Entity *e = alloc_entity_variable(scope, make_token_ident(name), type);
+ lbValue g = {};
+ g.type = alloc_type_pointer(type);
+ g.value = LLVMAddGlobal(m->mod, lb_type(m, type), cast(char const *)str);
+ if (value.value != nullptr) {
+ GB_ASSERT_MSG(LLVMIsConstant(value.value), LLVMPrintValueToString(value.value));
+ LLVMSetInitializer(g.value, value.value);
+ } else {
+ LLVMSetInitializer(g.value, LLVMConstNull(lb_type(m, type)));
+ }
+
+ lb_add_entity(m, e, g);
+ lb_add_member(m, name, g);
+
+ return lb_addr(g);
+}
+
+
gb_internal lbValue lb_find_runtime_value(lbModule *m, String const &name) {
AstPackage *p = m->info->runtime_package;
Entity *e = scope_lookup_current(p->scope, name);