[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