nir: Mark the 0.0 < abs(a) transformation as imprecise
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 1 Aug 2018 17:13:55 +0000 (10:13 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Sat, 4 Aug 2018 08:12:03 +0000 (01:12 -0700)
Unlike the much older -abs(a) >= 0.0 transformation, this is not
precise.  The behavior changes if the source is NaN.

No shader-db changes on any platform.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Thomas Helland <thomashelland90@gmail.com>
src/compiler/nir/nir_opt_algebraic.py

index 7fc4ff1d407800875abfeda2c59398ca1fcf8dd4..c4f46b56d95302d9e1eb7fb892cbc25bb1866d2d 100644 (file)
@@ -197,7 +197,7 @@ optimizations = [
    # fabs(a) > 0.0
    # fabs(a) != 0.0 because fabs(a) must be >= 0
    # a != 0.0
-   (('flt', 0.0, ('fabs', a)), ('fne', a, 0.0)),
+   (('~flt', 0.0, ('fabs', a)), ('fne', a, 0.0)),
 
    (('fmax',                        ('b2f(is_used_once)', a),           ('b2f', b)),           ('b2f', ('ior', a, b))),
    (('fmax', ('fneg(is_used_once)', ('b2f(is_used_once)', a)), ('fneg', ('b2f', b))), ('fneg', ('b2f', ('ior', a, b)))),