diff --git a/src/gallium/auxiliary/gallivm/lp_bld_coro.c b/src/gallium/auxiliary/gallivm/lp_bld_coro.c index 28f722e93c2..188d7e2c2c0 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_coro.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_coro.c @@ -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 do_alloc = lp_build_coro_alloc(gallivm, coro_id); 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; lp_build_if(&if_state_coro, gallivm, do_alloc); 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); 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); - 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; }