[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