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