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

Reply via email to