mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-14 06:13:45 +00:00
Parameterize LB_TUPLE_FIX_USE_PARTIAL_RETURN_CACHE
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user