[backport gcc-4.8/trunk r193554 ] gcc/ 2012-11-16 Jakub Jelinek PR target/54073 * config/i386/i386.md (movcc): Use comparison_operator instead of ordered_comparison_operator resp. ix86_fp_comparison_operator predicates. * config/i386/i386.c (ix86_expand_fp_movcc): Reject TImode or for -m32 DImode comparisons. --- gcc-4.7.3/gcc/config/i386/i386.c.~1~ 2013-04-02 18:54:39.000000000 +0200 +++ gcc-4.7.3/gcc/config/i386/i386.c 2013-05-19 17:35:49.024827071 +0200 @@ -19690,6 +19690,11 @@ ix86_expand_fp_movcc (rtx operands[]) return true; } + if (GET_MODE (op0) == TImode + || (GET_MODE (op0) == DImode + && !TARGET_64BIT)) + return false; + /* The floating point conditional move instructions don't directly support conditions resulting from a signed integer comparison. */ --- gcc-4.7.3/gcc/config/i386/i386.md.~1~ 2013-04-01 19:50:38.000000000 +0200 +++ gcc-4.7.3/gcc/config/i386/i386.md 2013-05-19 17:35:14.814924548 +0200 @@ -16318,7 +16318,7 @@ (define_peephole2 (define_expand "movcc" [(set (match_operand:SWIM 0 "register_operand" "") - (if_then_else:SWIM (match_operand 1 "ordered_comparison_operator" "") + (if_then_else:SWIM (match_operand 1 "comparison_operator" "") (match_operand:SWIM 2 "" "") (match_operand:SWIM 3 "" "")))] "" @@ -16435,7 +16435,7 @@ (define_split (define_expand "movcc" [(set (match_operand:X87MODEF 0 "register_operand" "") (if_then_else:X87MODEF - (match_operand 1 "ix86_fp_comparison_operator" "") + (match_operand 1 "comparison_operator" "") (match_operand:X87MODEF 2 "register_operand" "") (match_operand:X87MODEF 3 "register_operand" "")))] "(TARGET_80387 && TARGET_CMOVE)