- Zero fcmp arguments were previously replaced with zero select arguments without considering or adjusting the predicate. However, without no-signed-zeros, only the following are equivalent:
>= +0 <=> > -0 <= -0 <=> < +0 -0 >= <=> +0 > +0 <= <=> -0 <
- Combining fcmp+select into fminnum is not permitted when the arguments might be two zeros of opposite sign. E.g., fminnum(-0, +0) can return any of the two operands and is therefore not equivalent to '-0 < +0 ? -0 : +0'. This was handled for >= and <= but marked as 'FIXME' for > and <.
- fminimum does treat -0 as smaller than +0, so fcmp+select can be combined if the NaN-propagating bahaviour of fminimum is permitted. Previously, the handling of signed zeros applied to combining fcmp+select into both fminnum and fminimum.
The same applies for fmaxnum/fmaximum.
Hopefully 3) can make up for the performance lost by fixing 1) and 2).