On Mar 30, 2016 4:24 PM, "Ian Romanick" <i...@freedesktop.org> wrote: > > From: Ian Romanick <ian.d.roman...@intel.com> > > Oddly, this did not affect the shader where I first noticed the pattern. > That particular shader doesn't get its if-statement converted to a bcsel > because there are two assignments in the else-statement. This led to me > submitting https://bugs.freedesktop.org/show_bug.cgi?id=94747.
We have code for this. It's called nir_opt_peephole_select. We just need to make it more aggressive. > shader-db results: > > Sandy Bridge > total instructions in shared programs: 8467384 -> 8467069 (-0.00%) > instructions in affected programs: 36594 -> 36279 (-0.86%) > helped: 46 > HURT: 0 > > total cycles in shared programs: 117573448 -> 117568518 (-0.00%) > cycles in affected programs: 339114 -> 334184 (-1.45%) > helped: 46 > HURT: 0 > > Ivy Bridge / Haswell / Broadwell / Skylake: > total instructions in shared programs: 7774258 -> 7773999 (-0.00%) > instructions in affected programs: 30874 -> 30615 (-0.84%) > helped: 46 > HURT: 0 > > total cycles in shared programs: 65739190 -> 65734530 (-0.01%) > cycles in affected programs: 180380 -> 175720 (-2.58%) > helped: 45 > HURT: 1 > > No change on G45 or Ironlake. > > I also tried these expressions, but none of them affected any shaders in > shader-db: > > (('bcsel', a, 'a@bool', 'b@bool'), ('ior', a, b)), > (('bcsel', a, 'b@bool', False), ('iand', a, b)), > (('bcsel', a, 'b@bool', 'a@bool'), ('iand', a, b)), > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > --- > src/compiler/nir/nir_opt_algebraic.py | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py > index 5363323..59c3c36 100644 > --- a/src/compiler/nir/nir_opt_algebraic.py > +++ b/src/compiler/nir/nir_opt_algebraic.py > @@ -126,6 +126,7 @@ optimizations = [ > (('bcsel', ('flt', a, b), b, a), ('fmax', a, b)), > (('bcsel', ('inot', 'a@bool'), b, c), ('bcsel', a, c, b)), > (('bcsel', a, ('bcsel', a, b, c), d), ('bcsel', a, b, d)), > + (('bcsel', a, True, 'b@bool'), ('ior', a, b)), Seems reasonable Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net> > (('fmin', a, a), a), > (('fmax', a, a), a), > (('imin', a, a), a), > -- > 2.5.5 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev