On 12/19/2016 09:32 PM, Jason Ekstrand wrote: > This sequence shows up The Talos Principal, at least under Vulkan, > and prevents loop analysis from properly computing trip counts in a > few loops. > --- > src/compiler/nir/nir_opt_algebraic.py | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/src/compiler/nir/nir_opt_algebraic.py > b/src/compiler/nir/nir_opt_algebraic.py > index 698ac67..cc70ad5 100644 > --- a/src/compiler/nir/nir_opt_algebraic.py > +++ b/src/compiler/nir/nir_opt_algebraic.py > @@ -464,6 +464,14 @@ def bitfield_reverse(u): > > optimizations += [(bitfield_reverse('x@32'), ('bitfield_reverse', 'x'))] > > +# For any comparison operation, "cmp", if you have "a != a && a cmp b" then > +# the "a != a" is redundant because it's equivalent to "a is not NaN" and, if > +# a is a NaN then the second comparison will fail anyway. > +for op in ['flt', 'fge', 'feq', 'fne']: > + optimizations += [ > + (('iand', ('feq', a, a), (op, a, b)), (op, a, b)), > + (('iand', ('feq', a, a), (op, b, a)), (op, b, a)), > + ]
I don't think this is right. That will change (NaN == NaN) && (NaN != 7) from false to true. Right? You should just drop fne from the list... I think. Math is hard. > # Add optimizations to handle the case where the result of a ternary is > # compared to a constant. This way we can take things like > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev