Mesa (master): nir: Recognize a pattern of bool frobbing from TGSI KILL_IF.

Eric Anholt anholt at kemper.freedesktop.org
Wed Apr 1 18:02:24 UTC 2015


Module: Mesa
Branch: master
Commit: 15b03b7964fc2c3c52e9f384815b76957f557878
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=15b03b7964fc2c3c52e9f384815b76957f557878

Author: Eric Anholt <eric at anholt.net>
Date:   Sun Mar 29 23:04:21 2015 -0700

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 at gmail.com>

---

 src/glsl/nir/nir_opt_algebraic.py |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/glsl/nir/nir_opt_algebraic.py b/src/glsl/nir/nir_opt_algebraic.py
index 301d7a8..190bd91 100644
--- a/src/glsl/nir/nir_opt_algebraic.py
+++ b/src/glsl/nir/nir_opt_algebraic.py
@@ -100,6 +100,8 @@ optimizations = [
    (('fmul', ('b2f', a), ('b2f', b)), ('b2f', ('iand', a, b))),
    (('fsat', ('fadd', ('b2f', a), ('b2f', b))), ('b2f', ('ior', a, b))),
    (('iand', 'a at 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
    # the float versions because NaN always returns false on float
    # inequalities.




More information about the mesa-commit mailing list