nir: Allow opt_peephole_sel to be more aggressive in flattening IFs.
authorEric Anholt <eric@anholt.net>
Wed, 7 Sep 2016 02:45:51 +0000 (19:45 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 22 Sep 2016 08:10:21 +0000 (11:10 +0300)
commit36f0f0318275f65f8744ec6f9471702e2f58e6d5
tree1b6a4fb819a5d7a7527635edda690d9f53e5e535
parent6c648cdac80233765861bfebb74a6e2725ddbf26
nir: Allow opt_peephole_sel to be more aggressive in flattening IFs.

VC4 was running into a major performance regression from enabling control
flow in the glmark2 conditionals test, because of short if statements
containing an ffract.

This pass seems like it was was trying to ensure that we only flattened
IFs that should be entirely a win by guaranteeing that there would be
fewer bcsels than there were MOVs otherwise.  However, if the number of
ALU ops is small, we can avoid the overhead of branching (which itself
costs cycles) and still get a win, even if it means moving real
instructions out of the THEN/ELSE blocks.

For now, just turn on aggressive flattening on vc4.  i965 will need some
tuning to avoid regressions.  It does looks like this may be useful to
replace freedreno code.

Improves glmark2 -b conditionals:fragment-steps=5:vertex-steps=0 from 47
fps to 95 fps on vc4.

vc4 shader-db:
total instructions in shared programs: 101282 -> 99543 (-1.72%)
instructions in affected programs:     17365 -> 15626 (-10.01%)
total uniforms in shared programs: 31295 -> 31172 (-0.39%)
uniforms in affected programs:     3580 -> 3457 (-3.44%)
total estimated cycles in shared programs: 225182 -> 223746 (-0.64%)
estimated cycles in affected programs:     26085 -> 24649 (-5.51%)

v2: Update shader-db output.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> (v1)
src/compiler/nir/nir.h
src/compiler/nir/nir_opt_peephole_select.c
src/gallium/drivers/vc4/vc4_program.c
src/mesa/drivers/dri/i965/brw_nir.c