On 08/09/2016 07:30 PM, Kenneth Graunke wrote: > On Haswell (GL 3.3): > > total instructions in shared programs: 6211427 -> 6210079 (-0.02%) > instructions in affected programs: 219356 -> 218008 (-0.61%) > helped: 567 > HURT: 132 > > No spill/fill changes. > > LOST: 0 > GAINED: 4 > > On Broadwell (GL 4.4): > > total instructions in shared programs: 11640218 -> 11632136 (-0.07%) > instructions in affected programs: 542528 -> 534446 (-1.49%) > helped: 1661 > HURT: 143 > > total spills in shared programs: 2922 -> 2932 (0.34%) > spills in affected programs: 420 -> 430 (2.38%) > helped: 1 > HURT: 1 > > total fills in shared programs: 4389 -> 4390 (0.02%) > fills in affected programs: 967 -> 968 (0.10%) > helped: 1 > HURT: 1
I would have thought that this would help more. I wonder if it's being held back by the poor way we handle || and &&. We always implement these as actual instructions, but we could use predication. I had looked into this a very little bit in days just before NIR, and it looked promising. Once NIR landed, I couldn't tell the difference between logical-or and bitwise-or, and I abandoned the effort. I also had problems dealing with the single condition code register that we use. Long sequences like (a && b || c && d) really want to use all the condition code registers. > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/drivers/dri/i965/brw_nir.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_nir.c > b/src/mesa/drivers/dri/i965/brw_nir.c > index db2056d..b02c404 100644 > --- a/src/mesa/drivers/dri/i965/brw_nir.c > +++ b/src/mesa/drivers/dri/i965/brw_nir.c > @@ -487,6 +487,7 @@ brw_postprocess_nir(nir_shader *nir, > OPT_V(nir_lower_to_source_mods); > OPT(nir_copy_prop); > OPT(nir_opt_dce); > + OPT(nir_opt_move_comparisons); > > OPT(nir_lower_locals_to_regs); > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev