[Mesa-dev] [PATCH 3/6] nir: Share destination rewriting and replacement code in IO lowering.

Jason Ekstrand jason at jlekstrand.net
Thu Jul 14 19:41:10 UTC 2016


On Thu, Jul 14, 2016 at 10:49 AM, Kenneth Graunke <kenneth at whitecape.org>
wrote:

> Both loads and atomics had identical code to rewrite destinations,
> and all cases had the same two lines to replace instructions.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/compiler/nir/nir_lower_io.c | 44
> ++++++++++++++++++-----------------------
>  1 file changed, 19 insertions(+), 25 deletions(-)
>
> diff --git a/src/compiler/nir/nir_lower_io.c
> b/src/compiler/nir/nir_lower_io.c
> index 45cc671..3a8587a 100644
> --- a/src/compiler/nir/nir_lower_io.c
> +++ b/src/compiler/nir/nir_lower_io.c
> @@ -289,6 +289,8 @@ nir_lower_io_block(nir_block *block,
>                               per_vertex ? &vertex_index : NULL,
>                               state->type_size);
>
> +      nir_intrinsic_instr *replacement;
> +
>        switch (intrin->intrinsic) {
>        case nir_intrinsic_load_var: {
>           nir_intrinsic_instr *load =
> @@ -311,18 +313,7 @@ nir_lower_io_block(nir_block *block,
>
>           load->src[per_vertex ? 1 : 0] = nir_src_for_ssa(offset);
>
> -         if (intrin->dest.is_ssa) {
> -            nir_ssa_dest_init(&load->instr, &load->dest,
> -                              intrin->num_components,
> -                              intrin->dest.ssa.bit_size, NULL);
> -            nir_ssa_def_rewrite_uses(&intrin->dest.ssa,
> -                                     nir_src_for_ssa(&load->dest.ssa));
> -         } else {
> -            nir_dest_copy(&load->dest, &intrin->dest, state->mem_ctx);
> -         }
> -
> -         nir_instr_insert_before(&intrin->instr, &load->instr);
> -         nir_instr_remove(&intrin->instr);
> +         replacement = load;
>           break;
>        }
>
> @@ -348,8 +339,7 @@ nir_lower_io_block(nir_block *block,
>
>           store->src[per_vertex ? 2 : 1] = nir_src_for_ssa(offset);
>
> -         nir_instr_insert_before(&intrin->instr, &store->instr);
> -         nir_instr_remove(&intrin->instr);
> +         replacement = store;
>           break;
>        }
>
> @@ -379,24 +369,28 @@ nir_lower_io_block(nir_block *block,
>              nir_src_copy(&atomic->src[i+1], &intrin->src[i], atomic);
>           }
>
> +         replacement = atomic;
> +         break;
> +      }
> +
> +      default:
> +         break;
> +      }
> +
> +      if (nir_intrinsic_infos[intrin->intrinsic].has_dest) {
>           if (intrin->dest.is_ssa) {
> -            nir_ssa_dest_init(&atomic->instr, &atomic->dest,
> -                              intrin->dest.ssa.num_components,
> +            nir_ssa_dest_init(&replacement->instr, &replacement->dest,
> +                              intrin->num_components,
>

I think I'd rather keep it as intrin->dest.ssa.num_components.  That seems
more reliable and more consistent with bit_size.


>                                intrin->dest.ssa.bit_size, NULL);
>              nir_ssa_def_rewrite_uses(&intrin->dest.ssa,
> -                                     nir_src_for_ssa(&atomic->dest.ssa));
> +
>  nir_src_for_ssa(&replacement->dest.ssa));
>           } else {
> -            nir_dest_copy(&atomic->dest, &intrin->dest, state->mem_ctx);
> +            nir_dest_copy(&replacement->dest, &intrin->dest,
> state->mem_ctx);
>           }
> -
> -         nir_instr_insert_before(&intrin->instr, &atomic->instr);
> -         nir_instr_remove(&intrin->instr);
> -         break;
>        }
>
> -      default:
> -         break;
> -      }
> +      nir_instr_insert_before(&intrin->instr, &replacement->instr);
> +      nir_instr_remove(&intrin->instr);
>     }
>
>     return true;
> --
> 2.9.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160714/e6cdd2dd/attachment.html>


More information about the mesa-dev mailing list