aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2008-01-24 18:08:10 +0100
committerUros Bizjak <uros@gcc.gnu.org>2008-01-24 18:08:10 +0100
commitfcc448088df39d4512d3f1fd1d85ea2c83c36cf9 (patch)
treec6b21fc37a86df364486f9155106cbb51f394317
parent94de25225dcfcb12f44414885e32de5bfcba91e2 (diff)
downloadgcc-fcc448088df39d4512d3f1fd1d85ea2c83c36cf9.zip
gcc-fcc448088df39d4512d3f1fd1d85ea2c83c36cf9.tar.gz
gcc-fcc448088df39d4512d3f1fd1d85ea2c83c36cf9.tar.bz2
re PR target/34856 (ICE with some constant vectors)
PR target/34856 * config/i386/i386.c (ix86_expand_vector_init): Consider only CONST_INT, CONST_DOUBLE and CONST_FIXED as constant vector elements. testsuite/ChangeLog: PR target/34856 * gcc.dg/pr34856.c: New test. From-SVN: r131796
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr34856.c25
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b4668e7..6b4689a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-24 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/34856
+ * config/i386/i386.c (ix86_expand_vector_init): Consider only
+ CONST_INT, CONST_DOUBLE and CONST_FIXED as constant vector elements.
+
2008-01-24 Jakub Jakub Jelinek <jakub@redhat.com>
PR middle-end/34934
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index a8c8b72..6e9ae2a 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -23593,7 +23593,9 @@ ix86_expand_vector_init (bool mmx_ok, rtx target, rtx vals)
for (i = 0; i < n_elts; ++i)
{
x = XVECEXP (vals, 0, i);
- if (!CONSTANT_P (x))
+ if (!(CONST_INT_P (x)
+ || GET_CODE (x) == CONST_DOUBLE
+ || GET_CODE (x) == CONST_FIXED))
n_var++, one_var = i;
else if (x != CONST0_RTX (inner_mode))
all_const_zero = false;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 933bcae..96515ab 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-24 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/34856
+ * gcc.dg/pr34856.c: New test.
+
2008-01-24 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/namelist_39.f90: Delete temporary files.
diff --git a/gcc/testsuite/gcc.dg/pr34856.c b/gcc/testsuite/gcc.dg/pr34856.c
new file mode 100644
index 0000000..7900cc3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr34856.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-options "-O2 -msse2" { target { i?86-*-* x86_64-*-* } } } */
+
+#undef __vector
+#define __vector __attribute__((vector_size(16) ))
+
+typedef __vector signed char qword;
+typedef __vector unsigned int VU32;
+
+extern short g[192 + 16];
+
+void f (qword);
+
+void f1 (unsigned ctr)
+{
+ VU32 pin;
+ pin = (VU32){(unsigned int) &g[16]};
+ do
+ {
+ f ((qword) pin);
+ ctr--;
+ }
+ while (ctr);
+}