gallivm/coro: use a phi instead of alloca
this just matches what the docs recommend Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12432>
This commit is contained in:
parent
69109e0b19
commit
4ccee031e9
|
@ -176,9 +176,8 @@ void lp_build_coro_declare_malloc_hooks(struct gallivm_state *gallivm)
|
||||||
|
|
||||||
LLVMValueRef lp_build_coro_begin_alloc_mem(struct gallivm_state *gallivm, LLVMValueRef coro_id)
|
LLVMValueRef lp_build_coro_begin_alloc_mem(struct gallivm_state *gallivm, LLVMValueRef coro_id)
|
||||||
{
|
{
|
||||||
LLVMValueRef do_alloc = lp_build_coro_alloc(gallivm, coro_id);
|
|
||||||
LLVMTypeRef mem_ptr_type = LLVMPointerType(LLVMInt8TypeInContext(gallivm->context), 0);
|
LLVMTypeRef mem_ptr_type = LLVMPointerType(LLVMInt8TypeInContext(gallivm->context), 0);
|
||||||
LLVMValueRef alloc_mem_store = lp_build_alloca(gallivm, mem_ptr_type, "coro mem");
|
LLVMValueRef do_alloc = lp_build_coro_alloc(gallivm, coro_id);
|
||||||
struct lp_build_if_state if_state_coro;
|
struct lp_build_if_state if_state_coro;
|
||||||
lp_build_if(&if_state_coro, gallivm, do_alloc);
|
lp_build_if(&if_state_coro, gallivm, do_alloc);
|
||||||
LLVMValueRef coro_size = lp_build_coro_size(gallivm);
|
LLVMValueRef coro_size = lp_build_coro_size(gallivm);
|
||||||
|
@ -186,11 +185,14 @@ LLVMValueRef lp_build_coro_begin_alloc_mem(struct gallivm_state *gallivm, LLVMVa
|
||||||
|
|
||||||
assert(gallivm->coro_malloc_hook);
|
assert(gallivm->coro_malloc_hook);
|
||||||
alloc_mem = LLVMBuildCall(gallivm->builder, gallivm->coro_malloc_hook, &coro_size, 1, "");
|
alloc_mem = LLVMBuildCall(gallivm->builder, gallivm->coro_malloc_hook, &coro_size, 1, "");
|
||||||
|
|
||||||
LLVMBuildStore(gallivm->builder, alloc_mem, alloc_mem_store);
|
|
||||||
lp_build_endif(&if_state_coro);
|
lp_build_endif(&if_state_coro);
|
||||||
alloc_mem = LLVMBuildLoad(gallivm->builder, alloc_mem_store, "");
|
|
||||||
LLVMValueRef coro_hdl = lp_build_coro_begin(gallivm, coro_id, alloc_mem);
|
LLVMValueRef phi = LLVMBuildPhi(gallivm->builder, mem_ptr_type, "");
|
||||||
|
LLVMValueRef zero_bool = LLVMConstNull(mem_ptr_type);
|
||||||
|
LLVMAddIncoming(phi, &alloc_mem, &if_state_coro.true_block, 1);
|
||||||
|
LLVMAddIncoming(phi, &zero_bool, &if_state_coro.entry_block, 1);
|
||||||
|
|
||||||
|
LLVMValueRef coro_hdl = lp_build_coro_begin(gallivm, coro_id, phi);
|
||||||
return coro_hdl;
|
return coro_hdl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue