diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2025-12-27 12:34:08 +0000 |
|---|---|---|
| committer | gingerBill <gingerBill@users.noreply.github.com> | 2025-12-27 12:34:08 +0000 |
| commit | 76dbc5dd6fd669414986daed5f3fad7bea69408b (patch) | |
| tree | 62ec9969b9763b172273174a72ccc50f708b889f | |
| parent | edf1e183d707ecb3c315d0b87f8fc6e0f6b925c4 (diff) | |
Parameterize `LB_TUPLE_FIX_USE_PARTIAL_RETURN_CACHE`bill/shared-partial-return-memory
| -rw-r--r-- | src/llvm_backend.cpp | 1 | ||||
| -rw-r--r-- | src/llvm_backend_proc.cpp | 2 | ||||
| -rw-r--r-- | src/llvm_backend_utility.cpp | 14 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 1cde65640..aa133382e 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -17,6 +17,7 @@ #define LLVM_SET_INTERNAL_WEAK_LINKAGE(value) LLVMSetLinkage(value, USE_SEPARATE_MODULES ? LLVMWeakAnyLinkage : LLVMInternalLinkage); +#define LB_TUPLE_FIX_USE_PARTIAL_RETURN_CACHE true #include "llvm_backend.hpp" #include "llvm_abi.cpp" diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index fc2497a70..100d70b67 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -1196,7 +1196,7 @@ gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array<lbValue> c GB_ASSERT(rt->kind == Type_Tuple); for (isize j = 0; j < rt->Tuple.variables.count-1; j++) { Type *partial_return_type = rt->Tuple.variables[j]->type; - lbValue partial_return_ptr = lb_get_partial_return_local(p, partial_return_type, &partial_return_stack, /*use_stack*/true); + lbValue partial_return_ptr = lb_get_partial_return_local(p, partial_return_type, &partial_return_stack, /*use_stack*/LB_TUPLE_FIX_USE_PARTIAL_RETURN_CACHE); array_add(&processed_args, partial_return_ptr); } rt = reduce_tuple_to_single_type(rt->Tuple.variables[rt->Tuple.variables.count-1]->type); diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 5316b9749..ad6260d01 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -1151,11 +1151,15 @@ gb_internal lbValue lb_emit_tuple_ep(lbProcedure *p, lbValue ptr, i32 index) { lbValue res = tf->values[index]; GB_ASSERT(are_types_identical(res.type, result_type)); - // NOTE(bill): make an explicit copy because partial return values are sharing memory - // See: lb_get_partial_return_local - lbAddr addr = lb_add_local_generated(p, res.type, false); - lb_addr_store(p, addr, res); - return addr.addr; + if (LB_TUPLE_FIX_USE_PARTIAL_RETURN_CACHE) { + // NOTE(bill): make an explicit copy because partial return values are sharing memory + // See: lb_get_partial_return_local + lbAddr addr = lb_add_local_generated(p, res.type, false); + lb_addr_store(p, addr, res); + return addr.addr; + } else { + return lb_address_from_load_or_generate_local(p, res); + } } else { return lb_emit_struct_ep_internal(p, ptr, index, result_type); } |