[Mesa-dev] [PATCH] nir/loop_unroll: Fix out-of-bounds access handling

Jason Ekstrand jason at jlekstrand.net
Wed Mar 13 02:07:26 UTC 2019


Pushed!  Thanks.

On Tue, Mar 12, 2019 at 5:42 PM Timothy Arceri <tarceri at itsqueeze.com>
wrote:

>
>
> On 13/3/19 8:30 am, Jason Ekstrand wrote:
> > The previous code was completely broken when it came to constructing the
> > undef values.  I'm not sure how it ever worked.  For the case of a copy
> > that reads an undefined value, we can just delete the copy because the
> > destination is a valid undefined value.  This saves us the effort of
> > trying to construct a value for an arbitrary copy_deref intrinsic.
>
> Yes. It turns out this was indeed not required. Thanks for the fix!
>
> Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
>
> >
> > Fixes: e8a8937a04 "nir: add partial loop unrolling support"
> > Cc: Timothy Arceri <tarceri at itsqueeze.com>
> > ---
> >   src/compiler/nir/nir_opt_loop_unroll.c | 14 ++------------
> >   1 file changed, 2 insertions(+), 12 deletions(-)
> >
> > diff --git a/src/compiler/nir/nir_opt_loop_unroll.c
> b/src/compiler/nir/nir_opt_loop_unroll.c
> > index 06ec78b8068..b2696d4aadb 100644
> > --- a/src/compiler/nir/nir_opt_loop_unroll.c
> > +++ b/src/compiler/nir/nir_opt_loop_unroll.c
> > @@ -670,11 +670,9 @@ remove_out_of_bounds_induction_use(nir_shader
> *shader, nir_loop *loop,
> >               if (is_access_out_of_bounds(term,
> nir_src_as_deref(intrin->src[0]),
> >                                           trip_count)) {
> >                  if (intrin->intrinsic == nir_intrinsic_load_deref) {
> > -                  assert(intrin->src[0].is_ssa);
> > -                  nir_ssa_def *a_ssa = intrin->src[0].ssa;
> >                     nir_ssa_def *undef =
> > -                     nir_ssa_undef(&b, intrin->num_components,
> > -                                   a_ssa->bit_size);
> > +                     nir_ssa_undef(&b, intrin->dest.ssa.num_components,
> > +                                   intrin->dest.ssa.bit_size);
> >                     nir_ssa_def_rewrite_uses(&intrin->dest.ssa,
> >                                              nir_src_for_ssa(undef));
> >                  } else {
> > @@ -686,14 +684,6 @@ remove_out_of_bounds_induction_use(nir_shader
> *shader, nir_loop *loop,
> >               if (intrin->intrinsic == nir_intrinsic_copy_deref &&
> >                   is_access_out_of_bounds(term,
> nir_src_as_deref(intrin->src[1]),
> >                                           trip_count)) {
> > -               assert(intrin->src[1].is_ssa);
> > -               nir_ssa_def *a_ssa = intrin->src[1].ssa;
> > -               nir_ssa_def *undef =
> > -                  nir_ssa_undef(&b, intrin->num_components,
> a_ssa->bit_size);
> > -
> > -               /* Replace the copy with a store of the undefined value
> */
> > -               b.cursor = nir_before_instr(instr);
> > -               nir_store_deref(&b, nir_src_as_deref(intrin->src[0]),
> undef, ~0);
> >                  nir_instr_remove(instr);
> >               }
> >            }
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190312/74c58085/attachment.html>


More information about the mesa-dev mailing list