[Mesa-dev] [PATCH 2/2] nir/lower_vec_to_movs: Don't emit unneeded movs

Jason Ekstrand jason at jlekstrand.net
Wed Sep 23 07:34:43 PDT 2015


On Sep 23, 2015 02:19, "Eduardo Lima Mitev" <elima at igalia.com> wrote:
>
> On 09/23/2015 07:18 AM, Jason Ekstrand wrote:
> >
> > On Sep 22, 2015 10:01 PM, "Jason Ekstrand" <jason at jlekstrand.net
> > <mailto:jason at jlekstrand.net>> wrote:
> >>
> >> It's possible that, if a vecN operation is involved in a phi node,
that we
> >> could end up moving from a register to itself.  If swizzling is
involved,
> >> we need to emit the move but.  However, if there is no swizzling, then
the
> >> mov is a no-op and we might as well not bother emitting it.
> >>
> >> Shader-db results on Haswell:
> >>
> >>    total instructions in shared programs: 6262536 -> 6259558 (-0.05%)
> >>    instructions in affected programs:     184780 -> 181802 (-1.61%)
> >>    helped:                                838
> >>    HURT:                                  0
> >
> > By the way, I have absolutely no idea why this helps more than Matt's
> > patch to delete these in register coalesce.
> >
>
> Also in HSW, and with current master, I get this:
>
> total instructions in shared programs: 6260467 -> 6259804 (-0.01%)
> instructions in affected programs:     84738 -> 84075 (-0.78%)
> helped:                                375
> HURT:                                  0
>
> Something must have overlapped improvements in the mean, likely
> Alejandro's register coalescing modifiers patch.

No, Matt landed his patch to delete useless MOVs. This patch just stops us
from generating them in the first place.

> The two patches are:
>
> Reviewed-by: Eduardo Lima Mitev <elima at igalia.com>

Thanks!

--Jason

> >> ---
> >>  src/glsl/nir/nir_lower_vec_to_movs.c | 19 ++++++++++++++++++-
> >>  1 file changed, 18 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/src/glsl/nir/nir_lower_vec_to_movs.c
> > b/src/glsl/nir/nir_lower_vec_to_movs.c
> >> index 287f2bf..2039891 100644
> >> --- a/src/glsl/nir/nir_lower_vec_to_movs.c
> >> +++ b/src/glsl/nir/nir_lower_vec_to_movs.c
> >> @@ -83,7 +83,24 @@ insert_mov(nir_alu_instr *vec, unsigned start_idx,
> > nir_shader *shader)
> >>        }
> >>     }
> >>
> >> -   nir_instr_insert_before(&vec->instr, &mov->instr);
> >> +   /* In some situations (if the vecN is involved in a phi-web), we
> > can end
> >> +    * up with a mov from a register to itself.  Some of those
> > channels may end
> >> +    * up doing nothing and there's no reason to have them as part of
> > the mov.
> >> +    */
> >> +   if (src_matches_dest_reg(&mov->dest.dest, &mov->src[0].src) &&
> >> +       !mov->src[0].abs && !mov->src[0].negate) {
> >> +      for (unsigned i = 0; i < 4; i++) {
> >> +         if (mov->src[0].swizzle[i] == i)
> >> +            mov->dest.write_mask &= ~(1 << i);
> >> +      }
> >> +   }
> >> +
> >> +   /* Only emit the instruction if it actually does something */
> >> +   if (mov->dest.write_mask) {
> >> +      nir_instr_insert_before(&vec->instr, &mov->instr);
> >> +   } else {
> >> +      ralloc_free(mov);
> >> +   }
> >>
> >>     return mov->dest.write_mask;
> >>  }
> >> --
> >> 2.5.0.400.gff86faf
> >>
> >
> >
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150923/5373386b/attachment-0001.html>


More information about the mesa-dev mailing list