i965/vec4: Generate better code for ir_triop_csel.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 16 Oct 2014 01:57:07 +0000 (18:57 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 22 Oct 2014 04:14:03 +0000 (21:14 -0700)
commit6dc6e6e0d979aa666e2934ae40477195e4d37ceb
tree6eb446c75b75e282379a1856ce555bc64f7f3007
parentf5c3f095b97dc5d8997ca448ffffbca67b3db4d5
i965/vec4: Generate better code for ir_triop_csel.

Previously, we generated an extra CMP instruction:

   cmp.ge.f0(8)    g6<1>D          g1<0,4,1>F      0F
   cmp.nz.f0(8)    null            g6<4,4,1>D      0D
   (+f0) sel(8)    g5<1>F          g1.4<0,4,1>F    g2<0,4,1>F

The first operand is always a boolean, and we want to predicate the SEL
on that.  Rather than producing a boolean value and comparing it against
zero, we can just produce a condition code in the flag register.

Now we generate:

   cmp.ge.f0(8)    null            g1<0,4,1>F      0F
   (+f0) sel(8)    g5<1>F          g1.4<0,4,1>F    g2<0,4,1>F

No difference in shader-db.

v2: Remember to delete the old code (thanks Matt).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp