https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82692
--- Comment #7 from Uroš Bizjak <ubizjak at gmail dot com> --- To illustrate the problem, following patch fixes the failure: --cut here-- Index: combine.c =================================================================== --- combine.c (revision 254011) +++ combine.c (working copy) @@ -6784,7 +6784,7 @@ simplify_set (rtx x) && op0 == XEXP (inner_compare, 0) && op1 == XEXP (inner_compare, 1)) compare_mode = GET_MODE (inner_compare); - else + else if (!FLOAT_MODE_P (GET_MODE (op0))) compare_mode = SELECT_CC_MODE (new_code, op0, op1); /* If the mode changed, we have to change SET_DEST, the mode in the --cut here-- The patch avoids mode changes for floating-point operands. (It will work for x86, since it has all comparisons trapping and non-trapping).