From: Nicolai Hähnle <nicolai.haeh...@amd.com> --- src/gallium/auxiliary/gallivm/lp_bld_flow.c | 19 +++++++++++++++++++ src/gallium/auxiliary/gallivm/lp_bld_flow.h | 5 +++++ 2 files changed, 24 insertions(+)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.c b/src/gallium/auxiliary/gallivm/lp_bld_flow.c index 9183f45..3c3f16c 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_flow.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.c @@ -501,20 +501,39 @@ lp_build_alloca(struct gallivm_state *gallivm, res = LLVMBuildAlloca(first_builder, type, name); LLVMBuildStore(builder, LLVMConstNull(type), res); LLVMDisposeBuilder(first_builder); return res; } /** + * Like lp_build_alloca_undef, but do not zero-initialize the variable. + */ +LLVMValueRef +lp_build_alloca_undef(struct gallivm_state *gallivm, + LLVMTypeRef type, + const char *name) +{ + LLVMBuilderRef first_builder = create_builder_at_entry(gallivm); + LLVMValueRef res; + + res = LLVMBuildAlloca(first_builder, type, name); + + LLVMDisposeBuilder(first_builder); + + return res; +} + + +/** * Allocate an array of scalars/vectors. * * mem2reg pass is not capable of promoting structs or arrays to registers, but * we still put it in the first block anyway as failure to put allocas in the * first block may prevent the X86 backend from successfully align the stack as * required. * * Also the scalarrepl pass is supposedly more powerful and can promote * arrays in many cases. * diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.h b/src/gallium/auxiliary/gallivm/lp_bld_flow.h index 083b0ad..674fc18 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_flow.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.h @@ -189,20 +189,25 @@ lp_build_endif(struct lp_build_if_state *ctx); LLVMBasicBlockRef lp_build_insert_new_block(struct gallivm_state *gallivm, const char *name); LLVMValueRef lp_build_alloca(struct gallivm_state *gallivm, LLVMTypeRef type, const char *name); LLVMValueRef +lp_build_alloca_undef(struct gallivm_state *gallivm, + LLVMTypeRef type, + const char *name); + +LLVMValueRef lp_build_array_alloca(struct gallivm_state *gallivm, LLVMTypeRef type, LLVMValueRef count, const char *name); #ifdef __cplusplus } #endif #endif /* !LP_BLD_FLOW_H */ -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev