[Mesa-dev] [PATCH] nir/builder: Don't emit no-op swizzles

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Sat Feb 23 02:14:57 UTC 2019


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

On Sat, Feb 23, 2019 at 1:14 AM Ian Romanick <idr at freedesktop.org> wrote:
>
> Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
>
> On 2/22/19 4:03 PM, Jason Ekstrand wrote:
> > The nir_swizzle helper is used some on it's own but it's also called by
> > nir_channel and nir_channels which are used everywhere.  It's pretty
> > quick to check while we're walking the swizzle anyway whether or not
> > it's an identity swizzle.  If it is, we now don't bother emitting the
> > instruction.  Sure, copy-prop will clean it up for us but there's no
> > sense making more work for the optimizer than we have to.
> > ---
> >  src/compiler/nir/nir_builder.h | 10 +++++++++-
> >  1 file changed, 9 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h
> > index c6e80e729a8..253ca5941cb 100644
> > --- a/src/compiler/nir/nir_builder.h
> > +++ b/src/compiler/nir/nir_builder.h
> > @@ -497,8 +497,16 @@ nir_swizzle(nir_builder *build, nir_ssa_def *src, const unsigned *swiz,
> >     assert(num_components <= NIR_MAX_VEC_COMPONENTS);
> >     nir_alu_src alu_src = { NIR_SRC_INIT };
> >     alu_src.src = nir_src_for_ssa(src);
> > -   for (unsigned i = 0; i < num_components && i < NIR_MAX_VEC_COMPONENTS; i++)
> > +
> > +   bool is_identity_swizzle = true;
> > +   for (unsigned i = 0; i < num_components && i < NIR_MAX_VEC_COMPONENTS; i++) {
> > +      if (swiz[i] != i)
> > +         is_identity_swizzle = false;
> >        alu_src.swizzle[i] = swiz[i];
> > +   }
> > +
> > +   if (num_components == src->num_components && is_identity_swizzle)
> > +      return src;
> >
> >     return use_fmov ? nir_fmov_alu(build, alu_src, num_components) :
> >                       nir_imov_alu(build, alu_src, num_components);
> >
>
> _______________________________________________
> 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