diff options
| author | gingerBill <bill@gingerbill.org> | 2022-10-31 00:04:15 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-10-31 00:04:15 +0000 |
| commit | 9da37ed394d866828cad91b83fe8674a5c3e5775 (patch) | |
| tree | 254b0c61f61efca3f4a2d80142c05e5e960b6150 /src/llvm_backend_const.cpp | |
| parent | 8fa571c283dca207e9eae7b2924db3bbc9d6aa39 (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.cpp | 17 |
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; |