* config/i386/i386.md (*truncdfsf_mixed, *truncdfsf_i387,
authorJakub Jelinek <jakub@redhat.com>
Tue, 3 May 2016 12:18:57 +0000 (14:18 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 3 May 2016 12:18:57 +0000 (14:18 +0200)
*truncxfsf2_mixed, *truncxfdf2_mixed): Use v constraint instead
of x.

* gcc.target/i386/avx512f-cvt-1.c: New test.

From-SVN: r235819

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

index ba7f10d6d2a4f956e022b2e4d1d51b295cbb9a01..af475b3ea38581fb02a68f6c4409d4b7f04fa992 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-03  Jakub Jelinek  <jakub@redhat.com>
+
+       * config/i386/i386.md (*truncdfsf_mixed, *truncdfsf_i387,
+       *truncxfsf2_mixed, *truncxfdf2_mixed): Use v constraint instead
+       of x.
+
 2016-05-03  Richard Biener  <rguenther@suse.de>
 
        * gimplify.h (get_initialized_tmp_var): Add allow_ssa parameter
index 940dc204be5cfe401d5cf39f3899dde199baae4a..be7cfbfd64ed8671118b25d157eda1fd918f808b 100644 (file)
    (set_attr "mode" "SF")])
 
 (define_insn "*truncdfsf_mixed"
-  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,x ,?f,?x,?*r")
+  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,v ,?f,?v,?*r")
        (float_truncate:SF
-         (match_operand:DF 1 "nonimmediate_operand" "f ,xm,f ,f ,f")))
+         (match_operand:DF 1 "nonimmediate_operand" "f ,vm,f ,f ,f")))
    (clobber (match_operand:SF 2 "memory_operand"     "=X,X ,m ,m ,m"))]
   "TARGET_MIX_SSE_I387"
 {
    (set_attr "mode" "SF")])
 
 (define_insn "*truncdfsf_i387"
-  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,?f,?x,?*r")
+  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,?f,?v,?*r")
        (float_truncate:SF
          (match_operand:DF 1 "nonimmediate_operand" "f ,f ,f ,f")))
    (clobber (match_operand:SF 2 "memory_operand"     "=X,m ,m ,m"))]
 })
 
 (define_insn "*truncxfsf2_mixed"
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f,?x,?*r")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f,?v,?*r")
        (float_truncate:SF
          (match_operand:XF 1 "register_operand"   "f ,f ,f ,f")))
    (clobber (match_operand:SF 2 "memory_operand"   "=X,m ,m ,m"))]
    (set_attr "mode" "SF")])
 
 (define_insn "*truncxfdf2_mixed"
-  [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f,?x,?*r")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f,?v,?*r")
        (float_truncate:DF
          (match_operand:XF 1 "register_operand"   "f ,f ,f  ,f")))
    (clobber (match_operand:DF 2 "memory_operand"   "=X,m ,m  ,m"))]
index 5eadd0cc9763431edc569fec916b540f999f119b..020312fa643ff231cca2b2c2ab4add401c8b3bdd 100644 (file)
@@ -1,3 +1,7 @@
+2016-05-03  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.target/i386/avx512f-cvt-1.c: New test.
+
 2016-05-03  H.J. Lu  <hongjiu.lu@intel.com>
 
        * gcc.dg/tree-ssa/ssa-thread-14.c: Replace -fdump-tree-vrp with
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-cvt-1.c b/gcc/testsuite/gcc.target/i386/avx512f-cvt-1.c
new file mode 100644 (file)
index 0000000..acfbe31
--- /dev/null
@@ -0,0 +1,38 @@
+/* { dg-do assemble { target { avx512f && { ! ia32 } } } } */
+/* { dg-options "-O2 -mavx512f -mfpmath=387,sse" } */
+
+void
+f1 (double *p)
+{
+  register float x __asm ("xmm16");
+  x = *p;
+  __asm volatile ("" : "+v" (x));
+}
+
+void
+f2 (void)
+{
+  double d;
+  register float x __asm ("xmm16");
+  __asm volatile ("" : "=t" (d));
+  x = d;
+  __asm volatile ("" : "+v" (x));
+}
+
+void
+f3 (long double *p)
+{
+  register float x __asm ("xmm16");
+  x = *p;
+  __asm volatile ("" : "+v" (x));
+}
+
+void
+f4 (void)
+{
+  long double d;
+  register float x __asm ("xmm16");
+  __asm volatile ("" : "=t" (d));
+  x = d;
+  __asm volatile ("" : "+v" (x));
+}