diff options
| author | gingerBill <bill@gingerbill.org> | 2021-05-24 23:51:01 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-05-24 23:51:01 +0100 |
| commit | c21c754b6f649b8523edd9e03079df9c053f6c65 (patch) | |
| tree | f73e66626b9e82713dd3628debb989cfb66cd930 /src/llvm_backend.cpp | |
| parent | e948fcd2f1526de905220b2ff8a7891b1f52005e (diff) | |
Minimize copying on getting the address of a call if required
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 74c6cfc11..8439dd244 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -12599,7 +12599,7 @@ lbAddr lb_build_addr(lbProcedure *p, Ast *expr) { if (is_type_relative_pointer(type_of_expr(de->expr))) { lbAddr addr = lb_build_addr(p, de->expr); addr.relative.deref = true; - return addr; + return addr;\ } lbValue addr = lb_build_expr(p, de->expr); return lb_addr(addr); @@ -12608,9 +12608,13 @@ lbAddr lb_build_addr(lbProcedure *p, Ast *expr) { case_ast_node(ce, CallExpr, expr); // NOTE(bill): This is make sure you never need to have an 'array_ev' lbValue e = lb_build_expr(p, expr); + #if 1 + return lb_addr(lb_address_from_load_or_generate_local(p, e)); + #else lbAddr v = lb_add_local_generated(p, e.type, false); lb_addr_store(p, v, e); return v; + #endif case_end; case_ast_node(cl, CompoundLit, expr); |