From 4ccee031e9c4ce9f4de577cf93a1837a5f191ccb Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 17 Aug 2021 16:10:24 +1000 Subject: [PATCH] gallivm/coro: use a phi instead of alloca this just matches what the docs recommend Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/auxiliary/gallivm/lp_bld_coro.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) 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; }