aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_const.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-10-31 00:04:15 +0000
committergingerBill <bill@gingerbill.org>2022-10-31 00:04:15 +0000
commit9da37ed394d866828cad91b83fe8674a5c3e5775 (patch)
tree254b0c61f61efca3f4a2d80142c05e5e960b6150 /src/llvm_backend_const.cpp
parent8fa571c283dca207e9eae7b2924db3bbc9d6aa39 (diff)
Optimize `#caller_location` and `#location` to use read only data section where possible
Diffstat (limited to 'src/llvm_backend_const.cpp')
-rw-r--r--src/llvm_backend_const.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp
index 53c7c4dcb..a2209a89f 100644
--- a/src/llvm_backend_const.cpp
+++ b/src/llvm_backend_const.cpp
@@ -283,6 +283,23 @@ lbValue lb_emit_source_code_location(lbProcedure *p, Ast *node) {
return lb_emit_source_code_location(p, proc_name, pos);
}
+lbValue lb_emit_source_code_location_as_global(lbProcedure *p, String const &procedure, TokenPos const &pos) {
+ lbValue loc = lb_emit_source_code_location(p, procedure, pos);
+ lbAddr addr = lb_add_global_generated(p->module, loc.type, loc, nullptr);
+ lb_make_global_private_const(addr);
+ return lb_addr_load(p, addr);
+}
+
+
+lbValue lb_emit_source_code_location_as_global(lbProcedure *p, Ast *node) {
+ lbValue loc = lb_emit_source_code_location(p, node);
+ lbAddr addr = lb_add_global_generated(p->module, loc.type, loc, nullptr);
+ lb_make_global_private_const(addr);
+ return lb_addr_load(p, addr);
+}
+
+
+
LLVMValueRef lb_build_constant_array_values(lbModule *m, Type *type, Type *elem_type, isize count, LLVMValueRef *values, bool allow_local) {
bool is_local = allow_local && m->curr_procedure != nullptr;
bool is_const = true;