[X86] Fix fcmp+select to min/max lowering (#185594)
This does a few changes that are hard to separate from each other:
* Consider forming minnum/maxnum from setcc+select non-profitable. X86
has instructions specifically for the setcc+select pattern. (Without
this it's hard to get good coverage on this code path.)
* Reduce duplication in the code for forming FMIN/FMAX, by using
predicate inversion (to make setcc and select operand order match) and
predicate invswap (to canonicalize to ordered predicates). This leaves
us with just ordered and NaN-less predicates.
* For non-strict non-less predicates, convert them to strict ones via
invswap (i.e. swapping the operands of both the setcc and select).
Previously this just treated them the same as strict predicates, but I
believe that's incorrect in terms of signed zero handling.