https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119002
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Perhaps without looking at the setter, it could: /* See whether the operands might be unordered. */ if (HONOR_NANS (GET_MODE (XEXP (op0, 0)))) all = 15; else if (!flag_finite_math_only && GET_MODE_CLASS (GET_MODE (XEXP (op0, 0))) == MODE_CC) { machine_mode mode = GET_MODE (XEXP (op0, 0)); if (!REVERSIBLE_CC_MODE (mode) || REVERSE_CONDITION (GT, mode) != LE) FOR_EACH_MODE_IN_CLASS (mode, MODE_FLOAT) if (HONOR_NANS (mode)) { all = 15; break; } } ? I.e. use REVERSE_CONDITION if possible to find out if it is (maybe) floating point MODE_CC comparison and if there is any floating point mode with NaNs, assume it could be unordered.