vc4: Optimize out a comparison for bcsel based on an ALU comparison
authorEric Anholt <eric@anholt.net>
Wed, 6 Jan 2016 01:18:09 +0000 (17:18 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 6 Jan 2016 20:43:09 +0000 (12:43 -0800)
commit25aa436e8690dea181049e312e3e7f5f0c9d45da
treec04cef53161f4b0869f49df66f47fb22a460dfc9
parent7a9eb76786ea5534d395eef199974f8221e047d8
vc4: Optimize out a comparison for bcsel based on an ALU comparison

We routinely have code like:

vec1 ssa_220 = fge ssa_104, ssa_61
vec1 ssa_199 = bcsel ssa_220, ssa_106, ssa_105

and we would compare fge's args and choose between ~0 and 0 to generate
ssa_220, then compare ssa_220 to 0 and choose between bcsel's args.
Instead, try to notice the pattern and compare between fge's args to
select between bcsel's args.

total instructions in shared programs: 88019 -> 87574 (-0.51%)
instructions in affected programs:     9985 -> 9540 (-4.46%)
total estimated cycles in shared programs: 245752 -> 245237 (-0.21%)
estimated cycles in affected programs:     17232 -> 16717 (-2.99%)
src/gallium/drivers/vc4/vc4_program.c