aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-11-23 08:36:59 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-11-23 08:36:59 +0000
commit7706cb01c0e22bea0f4b583f3e6bc0ee06b224d0 (patch)
tree2e6d615738da0b38e2308b298b66ca5b7b89dd5d
parente63d44c2a9d2a95c7f23de189966be0a3dcc5923 (diff)
downloadgcc-7706cb01c0e22bea0f4b583f3e6bc0ee06b224d0.zip
gcc-7706cb01c0e22bea0f4b583f3e6bc0ee06b224d0.tar.gz
gcc-7706cb01c0e22bea0f4b583f3e6bc0ee06b224d0.tar.bz2
re PR tree-optimization/68445 (ICE: internal compiler error: in operator[], at vec.h)
2015-11-23 Richard Biener <rguenther@suse.de> PR tree-optimization/68445 * tree-vect-slp.c (vect_create_mask_and_perm): Properly use two different strides. * gcc.dg/vect/pr68445.c: New testcase. From-SVN: r230737
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr68445.c19
-rw-r--r--gcc/tree-vect-slp.c12
4 files changed, 37 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 22cf2bd..f2c7f5a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-23 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/68445
+ * tree-vect-slp.c (vect_create_mask_and_perm): Properly use
+ two different strides.
+
2015-11-23 Robin Dapp <rdapp@linux.vnet.ibm.com>
* config/s390/s390.h: Add new symref flags, _NOTALIGN2 etc.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7a2484c..fd35568 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-11-23 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/68445
+ * gcc.dg/vect/pr68445.c: New testcase.
+
2015-11-23 Robin Dapp <rdapp@linux.vnet.ibm.com>
* gcc.target/s390/load-relative-check.c: New test to check
diff --git a/gcc/testsuite/gcc.dg/vect/pr68445.c b/gcc/testsuite/gcc.dg/vect/pr68445.c
new file mode 100644
index 0000000..e2b0c01
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr68445.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+void IMB_double_fast_x (int *destf, int *dest, int y, int *p1f)
+{
+ int i;
+ for (i = y; i > 0; i--)
+ {
+ *dest++ = 0;
+ destf[0] = destf[4] = p1f[0];
+ destf[1] = destf[5] = p1f[1];
+ destf[2] = destf[6] = p1f[2];
+ destf[3] = destf[7] = p1f[3];
+ destf += 8;
+ p1f += 4;
+ }
+}
+
+/* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" } } */
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 704f42f..446ef98 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -3177,10 +3177,11 @@ vect_create_mask_and_perm (gimple *stmt,
{
tree perm_dest;
gimple *perm_stmt = NULL;
- int i, stride;
+ int i, stride_in, stride_out;
tree first_vec, second_vec, data_ref;
- stride = SLP_TREE_NUMBER_OF_VEC_STMTS (node) / ncopies;
+ stride_out = SLP_TREE_NUMBER_OF_VEC_STMTS (node) / ncopies;
+ stride_in = dr_chain.length () / ncopies;
/* Initialize the vect stmts of NODE to properly insert the generated
stmts later. */
@@ -3202,10 +3203,11 @@ vect_create_mask_and_perm (gimple *stmt,
vect_finish_stmt_generation (stmt, perm_stmt, gsi);
/* Store the vector statement in NODE. */
- SLP_TREE_VEC_STMTS (node)[stride * i + vect_stmts_counter] = perm_stmt;
+ SLP_TREE_VEC_STMTS (node)[stride_out * i + vect_stmts_counter]
+ = perm_stmt;
- first_vec_indx += stride;
- second_vec_indx += stride;
+ first_vec_indx += stride_in;
+ second_vec_indx += stride_in;
}
}