nir: Recognize a pattern of bool frobbing from TGSI KILL_IF.
TGSI's conditional discards take float arg and negate it, so GLSL to TGSI generates a b2f and negates that value. Only, in NIR we want a proper bool once again, so we compare with 0. This is a lot of pointless extra instructions. total instructions in shared programs: 39735 -> 39702 (-0.08%) instructions in affected programs: 1342 -> 1309 (-2.46%) Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
parent
6e8d4a2f80
commit
15b03b7964
|
@ -100,6 +100,8 @@ optimizations = [
|
||||||
(('fmul', ('b2f', a), ('b2f', b)), ('b2f', ('iand', a, b))),
|
(('fmul', ('b2f', a), ('b2f', b)), ('b2f', ('iand', a, b))),
|
||||||
(('fsat', ('fadd', ('b2f', a), ('b2f', b))), ('b2f', ('ior', a, b))),
|
(('fsat', ('fadd', ('b2f', a), ('b2f', b))), ('b2f', ('ior', a, b))),
|
||||||
(('iand', 'a@bool', 1.0), ('b2f', a)),
|
(('iand', 'a@bool', 1.0), ('b2f', a)),
|
||||||
|
(('flt', ('fneg', ('b2f', a)), 0), a), # Generated by TGSI KILL_IF.
|
||||||
|
(('flt', ('fsub', 0.0, ('b2f', a)), 0), a), # Generated by TGSI KILL_IF.
|
||||||
# Comparison with the same args. Note that these are not done for
|
# Comparison with the same args. Note that these are not done for
|
||||||
# the float versions because NaN always returns false on float
|
# the float versions because NaN always returns false on float
|
||||||
# inequalities.
|
# inequalities.
|
||||||
|
|
Loading…
Reference in New Issue