nir: Lower flrp with Boolean interpolator to bcsel
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 7 Mar 2016 21:09:30 +0000 (13:09 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 22 Mar 2016 21:42:42 +0000 (14:42 -0700)
commita4079f1cb2d7142d798f6d7fcb7ef29f34976f5b
tree897f28c9b2d2baf8f919bf39e4e7334d302cd36d
parent9442db4f89156713bcb241803f6de7c0777262c5
nir: Lower flrp with Boolean interpolator to bcsel

On Intel platforms that don't set lower_flrp, using bcsel instead of
flrp seems to be a small amount worse.  On those platforms, the use of
flrp, bcsel, and multiply of b2f is still an active area of research.
In review, Matt suggested this is because bcsel turns into CMP+SEL, and
because of the flag register we can't schedule instructions well.

shader-db results:

G4X / Ironlake
total instructions in shared programs: 4016538 -> 4012279 (-0.11%)
instructions in affected programs: 161556 -> 157297 (-2.64%)
helped: 1077
HURT: 1

total cycles in shared programs: 84328296 -> 84315862 (-0.01%)
cycles in affected programs: 4174570 -> 4162136 (-0.30%)
helped: 926
HURT: 53

Unsurprisingly, no changes on later platforms.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/compiler/nir/nir_opt_algebraic.py