https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87599
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-10-13 Ever confirmed|0 |1 --- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to Alexander Monakov from comment #3) > The problem is when movddup is available (with -msse3), IRA selects the > movddup alternative in the vec_dupv2di pattern - perhaps something is off > there? movddup is selected because of -msse3. This patch tells IRA that movddup also takes register source. > (to be clear: '-O2 -mtune=intel' - good, '-O2 -mtune=intel -msse3' - bad) diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index d95d7f77b06..47e0fb67627 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -18185,7 +18185,7 @@ (define_insn "*vec_dupv2di" [(set (match_operand:V2DI 0 "register_operand" "=x,v,v,x") (vec_duplicate:V2DI - (match_operand:DI 1 "nonimmediate_operand" " 0,Yv,m,0")))] + (match_operand:DI 1 "nonimmediate_operand" " 0,Yv,vm,0")))] "TARGET_SSE" "@ punpcklqdq\t%0, %0