diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index 59db4c7fb70..56e45dbc8f3 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -3613,34 +3613,24 @@ late_optimizations = [ # a=Inf, b=-Inf a=-Inf, b=Inf a=NaN b=NaN # (a+b) < 0 false false false false # a < -b false false false false - # -(a+b) < 0 false false false false - # -a < b false false false false # (a+b) >= 0 false false false false # a >= -b true true false false - # -(a+b) >= 0 false false false false - # -a >= b true true false false # (a+b) == 0 false false false false # a == -b true true false false # (a+b) != 0 true true true true # a != -b false false true true - (('flt', ('fadd(is_used_once)', a, b), 0.0), ('flt', a, ('fneg', b))), - (('flt', ('fneg(is_used_once)', ('fadd(is_used_once)', a, b)), 0.0), ('flt', ('fneg', a), b)), - (('flt', 0.0, ('fadd(is_used_once)', a, b) ), ('flt', ('fneg', a), b)), - (('flt', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', a, b))), ('flt', a, ('fneg', b))), - (('~fge', ('fadd(is_used_once)', a, b), 0.0), ('fge', a, ('fneg', b))), - (('~fge', ('fneg(is_used_once)', ('fadd(is_used_once)', a, b)), 0.0), ('fge', ('fneg', a), b)), - (('~fge', 0.0, ('fadd(is_used_once)', a, b) ), ('fge', ('fneg', a), b)), - (('~fge', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', a, b))), ('fge', a, ('fneg', b))), - (('~feq', ('fadd(is_used_once)', a, b), 0.0), ('feq', a, ('fneg', b))), - (('~fneu', ('fadd(is_used_once)', a, b), 0.0), ('fneu', a, ('fneg', b))), + (('flt', ('fadd(is_used_once)', a, b), 0.0), ('flt', a, ('fneg', b))), + (('flt', 0.0, ('fadd(is_used_once)', a, b) ), ('flt', ('fneg', a), b)), + (('fge', ('fadd(is_used_once,ninf)', a, b), 0.0), ('fge', a, ('fneg', b))), + (('fge', 0.0, ('fadd(is_used_once,ninf)', a, b) ), ('fge', ('fneg', a), b)), + (('feq', ('fadd(is_used_once,ninf)', a, b), 0.0), ('feq', a, ('fneg', b))), + (('fneu', ('fadd(is_used_once,ninf)', a, b), 0.0), ('fneu', a, ('fneg', b))), # If either source must be finite, then the original (a+b) cannot produce # NaN due to Inf-Inf. The patterns and the replacements produce the same # result if b is NaN. Therefore, the replacements are exact. - (('fge', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('fge', a, ('fneg', b))), - (('fge', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a(is_finite)', b)), 0.0), ('fge', ('fneg', a), b)), - (('fge', 0.0, ('fadd(is_used_once)', 'a(is_finite)', b) ), ('fge', ('fneg', a), b)), - (('fge', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', 'a(is_finite)', b))), ('fge', a, ('fneg', b))), + (('fge', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('fge', a, ('fneg', b))), + (('fge', 0.0, ('fadd(is_used_once)', 'a(is_finite)', b) ), ('fge', ('fneg', a), b)), (('feq', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('feq', a, ('fneg', b))), (('fneu', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('fneu', a, ('fneg', b))), @@ -3825,7 +3815,7 @@ late_optimizations.extend([ (('fge', ('fsat(is_used_once)', a), 1.0), ('fge', a, 1.0)), - (('~fge', ('fmin(is_used_once)', ('fadd(is_used_once)', a, b), ('fadd', c, d)), 0.0), ('iand', ('fge', a, ('fneg', b)), ('fge', c, ('fneg', d)))), + (('fge', ('fmin(is_used_once,nnan)', ('fadd(is_used_once)', a, b), ('fadd', c, d)), 0.0), ('iand', ('fge', a, ('fneg', b)), ('fge', c, ('fneg', d)))), (('flt', ('fneg', a), ('fneg', b)), ('flt', b, a)), (('fge', ('fneg', a), ('fneg', b)), ('fge', b, a)),