[Mesa-dev] [PATCH 3/3] gallium/radeon: use lp_build_alloca_undef
Marek Olšák
maraeo at gmail.com
Wed Aug 10 13:11:19 UTC 2016
For the series:
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Tue, Aug 9, 2016 at 12:38 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> Avoid building all those store 0 / store undef instrucction pairs that
> end up getting removed anyway.
> ---
> src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c | 15 +++------------
> 1 file changed, 3 insertions(+), 12 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
> index 6a010d5..b419add 100644
> --- a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
> +++ b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
> @@ -483,43 +483,34 @@ static LLVMValueRef fetch_system_value(struct lp_build_tgsi_context *bld_base,
> struct gallivm_state *gallivm = bld_base->base.gallivm;
>
> LLVMValueRef cval = ctx->system_values[reg->Register.Index];
> if (LLVMGetTypeKind(LLVMTypeOf(cval)) == LLVMVectorTypeKind) {
> cval = LLVMBuildExtractElement(gallivm->builder, cval,
> lp_build_const_int32(gallivm, swizzle), "");
> }
> return bitcast(bld_base, type, cval);
> }
>
> -static LLVMValueRef si_build_alloca_undef(struct gallivm_state *gallivm,
> - LLVMTypeRef type,
> - const char *name)
> -{
> - LLVMValueRef ptr = lp_build_alloca(gallivm, type, name);
> - LLVMBuildStore(gallivm->builder, LLVMGetUndef(type), ptr);
> - return ptr;
> -}
> -
> static void emit_declaration(struct lp_build_tgsi_context *bld_base,
> const struct tgsi_full_declaration *decl)
> {
> struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
> LLVMBuilderRef builder = bld_base->base.gallivm->builder;
> unsigned first, last, i;
> switch(decl->Declaration.File) {
> case TGSI_FILE_ADDRESS:
> {
> unsigned idx;
> for (idx = decl->Range.First; idx <= decl->Range.Last; idx++) {
> unsigned chan;
> for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) {
> - ctx->soa.addr[idx][chan] = si_build_alloca_undef(
> + ctx->soa.addr[idx][chan] = lp_build_alloca_undef(
> &ctx->gallivm,
> ctx->soa.bld_base.uint_bld.elem_type, "");
> }
> }
> break;
> }
>
> case TGSI_FILE_TEMPORARY:
> {
> char name[16] = "";
> @@ -574,21 +565,21 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base,
> ctx->temps_count = bld_base->info->file_max[TGSI_FILE_TEMPORARY] + 1;
> ctx->temps = MALLOC(TGSI_NUM_CHANNELS * ctx->temps_count * sizeof(LLVMValueRef));
> }
> if (!array_alloca) {
> for (i = 0; i < decl_size; ++i) {
> #ifdef DEBUG
> snprintf(name, sizeof(name), "TEMP%d.%c",
> first + i / 4, "xyzw"[i % 4]);
> #endif
> ctx->temps[first * TGSI_NUM_CHANNELS + i] =
> - si_build_alloca_undef(bld_base->base.gallivm,
> + lp_build_alloca_undef(bld_base->base.gallivm,
> bld_base->base.vec_type,
> name);
> }
> } else {
> LLVMValueRef idxs[2] = {
> bld_base->uint_bld.zero,
> NULL
> };
> LLVMValueRef undef = NULL;
> unsigned j = 0;
> @@ -633,21 +624,21 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base,
> }
> break;
>
> case TGSI_FILE_OUTPUT:
> {
> unsigned idx;
> for (idx = decl->Range.First; idx <= decl->Range.Last; idx++) {
> unsigned chan;
> assert(idx < RADEON_LLVM_MAX_OUTPUTS);
> for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) {
> - ctx->soa.outputs[idx][chan] = si_build_alloca_undef(
> + ctx->soa.outputs[idx][chan] = lp_build_alloca_undef(
> &ctx->gallivm,
> ctx->soa.bld_base.base.elem_type, "");
> }
> }
> break;
> }
>
> case TGSI_FILE_MEMORY:
> ctx->declare_memory_region(ctx, decl);
> break;
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list