sse.md (sse2_movq128): Use v constraint instead of x.
authorJakub Jelinek <jakub@redhat.com>
Wed, 4 May 2016 17:02:57 +0000 (19:02 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 4 May 2016 17:02:57 +0000 (19:02 +0200)
* config/i386/sse.md (sse2_movq128): Use v constraint instead of x.

* gcc.target/i386/avx512vl-vmovq-1.c: New test.

From-SVN: r235893

gcc/ChangeLog
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/avx512vl-vmovq-1.c [new file with mode: 0644]

index 92da7b52538710b3fbe6d125779c38d5dac5f93d..c5d7251d620292a67ee6e4c40556f1216ee057c2 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-04  Jakub Jelinek  <jakub@redhat.com>
+
+       * config/i386/sse.md (sse2_movq128): Use v constraint instead of x.
+
 2016-05-04  Jan Hubicka  <hubicka@ucw.cz>
 
        * tree-inline.c (expand_call_inline): Fix path dealing with
index 42d553cfdaa5adce24dbee78ff8cb2567ca2a655..45d819e3cc9114989f1582e723d131ad0c5bb26e 100644 (file)
    (set_attr "mode" "<sseinsnmode>")])
 
 (define_insn "sse2_movq128"
-  [(set (match_operand:V2DI 0 "register_operand" "=x")
+  [(set (match_operand:V2DI 0 "register_operand" "=v")
        (vec_concat:V2DI
          (vec_select:DI
-           (match_operand:V2DI 1 "nonimmediate_operand" "xm")
+           (match_operand:V2DI 1 "nonimmediate_operand" "vm")
            (parallel [(const_int 0)]))
          (const_int 0)))]
   "TARGET_SSE2"
index 5fe37cc248035f5e40ddc0957bfe1a4d74491621..ee63d45bd9ceda2346a1ab2ed8cddd4af8b017aa 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-04  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.target/i386/avx512vl-vmovq-1.c: New test.
+
 2016-05-04  Jan Hubicka  <hubicka@ucw.cz>
 
        * gcc.dg/ipa/pure-const-3.c: New testcase.
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vmovq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vmovq-1.c
new file mode 100644 (file)
index 0000000..8f3d346
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do assemble { target { avx512vl && { ! ia32 } } } } */
+/* { dg-options "-O2 -mavx512vl" } */
+
+#include <x86intrin.h>
+
+void
+foo (__m128i x, __m128i *y)
+{
+  register __m128i a __asm ("xmm16");
+  a = x;
+  asm volatile ("" : "+v" (a));
+  a = _mm_move_epi64 (a);
+  asm volatile ("" : "+v" (a));
+  a = _mm_move_epi64 (*y);
+  asm volatile ("" : "+v" (a));
+}