OSDN Git Service

Set use_avx256_p if 256bit AVX register is used in vector move.
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Nov 2010 21:16:36 +0000 (21:16 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Nov 2010 21:16:36 +0000 (21:16 +0000)
gcc/

2010-11-03  H.J. Lu  <hongjiu.lu@intel.com>

PR target/46295
* config/i386/i386.c (ix86_expand_vector_move): Set use_avx256_p
if 256bit AVX register is used.

gcc/testsuite/

2010-11-03  H.J. Lu  <hongjiu.lu@intel.com>

PR target/46295
* gcc.target/i386/pr46295.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@166277 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr46295.c [new file with mode: 0644]

index 5c6387e..87d9bc4 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/46295
+       * config/i386/i386.c (ix86_expand_vector_move): Set use_avx256_p
+       if 256bit AVX register is used.
+
 2010-11-03  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        * config/rs6000/rs6000.c (rs6000_emit_minmax): Add support to use
index ba1e4fc..3558899 100644 (file)
@@ -15144,6 +15144,9 @@ ix86_expand_vector_move (enum machine_mode mode, rtx operands[])
   rtx op0 = operands[0], op1 = operands[1];
   unsigned int align = GET_MODE_ALIGNMENT (mode);
 
+  if (use_avx256_p (mode, NULL_TREE))
+    cfun->machine->use_avx256_p = true;
+
   /* Force constants other than zero into memory.  We do not know how
      the instructions used to build constants modify the upper 64 bits
      of the register, once we have that information we may be able
index 206798d..a602ecf 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/46295
+       * gcc.target/i386/pr46295.c: New.
+
 2010-11-03  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        * gcc.target/powerpc/vsx-sfminmax.c: New test for using double
diff --git a/gcc/testsuite/gcc.target/i386/pr46295.c b/gcc/testsuite/gcc.target/i386/pr46295.c
new file mode 100644 (file)
index 0000000..219f34e
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -mavx -mtune=generic -dp" } */
+
+typedef double EXPRESS[5];
+void Parse_Rel_Factor (EXPRESS Express,int *Terms);
+void Parse_Vector ()
+{
+   EXPRESS Express;
+   int Terms;
+   for (Terms = 0; Terms < 5; Terms++)
+     Express[Terms] = 0.0;
+   Parse_Rel_Factor(Express,&Terms);
+}
+
+/* { dg-final { scan-assembler-times "avx_vzeroupper" 1 } } */