[Mesa-dev] [PATCH 2/3] gallivm: add lp_build_alloca_undef
Roland Scheidegger
sroland at vmware.com
Tue Aug 9 14:21:16 UTC 2016
Am 09.08.2016 um 12:38 schrieb Nicolai Hähnle:
> From: Nicolai Hähnle <nicolai.haehnle at 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.
Like lp_build_alloca
For the series:
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
> + */
> +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 */
>
More information about the mesa-dev
mailing list