Hi, We have
(define_insn "*movsf_internal" [(set (match_operand:SF 0 "nonimmediate_operand" "=Yf*f,m ,Yf*f,?r ,?m,v,v,v,m,?r,?Yi,!*y,!*y,!m,!r ,!*Ym") (match_operand:SF 1 "general_operand" "Yf*fm,Yf*f,G ,rmF,rF,C,v,m,v,Yj,r ,*y ,m ,*y,*Yn,r"))] alternative 13 is MMXMOV instruction to store "*y" to "!m". But alternative 13 gets the default mode, SF. But MMXMOV is case TYPE_MMXMOV: switch (get_attr_mode (insn)) { case MODE_DI: return "movq\t{%1, %0|%0, %1}"; case MODE_SI: return "movd\t{%1, %0|%0, %1}"; default: gcc_unreachable (); } MODE_SF gets gcc_unreachable. This patch sets mode to SI for alternative 13. Tested on Linux/x86-64. OK to install? Thanks. H.J. --- 2013-12-10 H.J. Lu <hongjiu...@intel.com> PR target/59458 * config/i386/i386.md (*movsf_internal): Set mode to SI for alternative 13. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 7138868..aa2664f 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3126,7 +3140,7 @@ (const_string "1") (const_string "*"))) (set (attr "mode") - (cond [(eq_attr "alternative" "3,4,9,10,14,15") + (cond [(eq_attr "alternative" "3,4,9,10,13,14,15") (const_string "SI") (eq_attr "alternative" "11") (const_string "DI")