[Mesa-dev] [PATCH] nir: Optimize useless comparisons against true/false.

Matt Turner mattst88 at gmail.com
Tue Dec 1 16:16:47 PST 2015

I add the true/false variables for clarity since there are some existing
optimizations using ~0 where it actually has nothing to do with true.

I could take it or leave it. We obviously can't use them for feq and
friends. Maybe itrue/ifalse and ftrue/ffalse?

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

diff --git a/src/glsl/nir/nir_opt_algebraic.py b/src/glsl/nir/nir_opt_algebraic.py
index 6aa8b1f..04261e7 100644
--- a/src/glsl/nir/nir_opt_algebraic.py
+++ b/src/glsl/nir/nir_opt_algebraic.py
@@ -32,6 +32,9 @@ b = 'b'
 c = 'c'
 d = 'd'
+true = ~0
+false = 0
 # Written in the form (<search>, <replace>) where <search> is an expression
 # and <replace> is either an expression or a value.  An expression is
 # defined as a tuple of the form (<op>, <src0>, <src1>, <src2>, <src3>)
@@ -94,6 +97,8 @@ optimizations = [
    (('inot', ('ige', a, b)), ('ilt', a, b)),
    (('inot', ('ieq', a, b)), ('ine', a, b)),
    (('inot', ('ine', a, b)), ('ieq', a, b)),
+   (('ieq', 'a at bool', true), a),
+   (('ine', 'a at bool', false), a),
    (('fge', ('fneg', ('fabs', a)), 0.0), ('feq', a, 0.0)),
    (('bcsel', ('flt', a, b), a, b), ('fmin', a, b)),
    (('bcsel', ('flt', a, b), b, a), ('fmax', a, b)),

More information about the mesa-dev mailing list