aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2010-11-05 12:53:39 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2010-11-05 05:53:39 -0700
commitd73ee4e74eb82f29e5949c13c6544b50d0f96d4c (patch)
tree699be373e4c6e336a681bdbc2e0329aab8120291
parent8b7e852901472ee45e1b1e3c2dbfa410eb892290 (diff)
downloadgcc-d73ee4e74eb82f29e5949c13c6544b50d0f96d4c.zip
gcc-d73ee4e74eb82f29e5949c13c6544b50d0f96d4c.tar.gz
gcc-d73ee4e74eb82f29e5949c13c6544b50d0f96d4c.tar.bz2
Check 256bit AVX register in move expanders.
gcc/ 2010-11-05 H.J. Lu <hongjiu.lu@intel.com> Uros Bizjak <ubizjak@gmail.com> * config/i386/i386.c (ix86_expand_move): Set use_avx256_p if 256bit AVX register is used. (ix86_expand_vector_move_misalign): Likewise. (ix86_expand_vector_move): Replace use_avx256_p with VALID_AVX256_REG_MODE. gcc/testsuite/ 2010-11-05 H.J. Lu <hongjiu.lu@intel.com> * gcc.target/i386/avx-vzeroupper-19.c: New. Co-Authored-By: Uros Bizjak <ubizjak@gmail.com> From-SVN: r166358
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386.c8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-vzeroupper-19.c17
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b1c9f5c..1d0902f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2010-11-05 H.J. Lu <hongjiu.lu@intel.com>
+ Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_expand_move): Set use_avx256_p if
+ 256bit AVX register is used.
+ (ix86_expand_vector_move_misalign): Likewise.
+ (ix86_expand_vector_move): Replace use_avx256_p with
+ VALID_AVX256_REG_MODE.
+
2010-11-05 Joern Rennecke <amylaar@spamcop.net>
PR target/44750
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 3558899..00febba 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -15000,6 +15000,9 @@ ix86_expand_move (enum machine_mode mode, rtx operands[])
rtx op0, op1;
enum tls_model model;
+ if (VALID_AVX256_REG_MODE (mode))
+ cfun->machine->use_avx256_p = true;
+
op0 = operands[0];
op1 = operands[1];
@@ -15144,7 +15147,7 @@ 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))
+ if (VALID_AVX256_REG_MODE (mode))
cfun->machine->use_avx256_p = true;
/* Force constants other than zero into memory. We do not know how
@@ -15253,6 +15256,9 @@ ix86_expand_vector_move_misalign (enum machine_mode mode, rtx operands[])
{
rtx op0, op1, m;
+ if (VALID_AVX256_REG_MODE (mode))
+ cfun->machine->use_avx256_p = true;
+
op0 = operands[0];
op1 = operands[1];
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9631772..c7189a9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2010-11-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc.target/i386/avx-vzeroupper-19.c: New.
+
2010-11-05 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/46099
diff --git a/gcc/testsuite/gcc.target/i386/avx-vzeroupper-19.c b/gcc/testsuite/gcc.target/i386/avx-vzeroupper-19.c
new file mode 100644
index 0000000..602de87
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx-vzeroupper-19.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -mavx -mtune=generic -dp" } */
+
+void feat_s3_cep_dcep (int cepsize_used, float **mfc, float **feat)
+{
+ float *f;
+ float *w, *_w;
+ int i;
+ __builtin_memcpy (feat[0], mfc[0], cepsize_used * sizeof(float));
+ f = feat[0] + cepsize_used;
+ w = mfc[2];
+ _w = mfc[-2];
+ for (i = 0; i < cepsize_used; i++)
+ f[i] = w[i] - _w[i];
+}
+
+/* { dg-final { scan-assembler-times "avx_vzeroupper" 1 } } */