diff options
author | Richard Biener <rguenther@suse.de> | 2015-11-23 08:36:59 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-11-23 08:36:59 +0000 |
commit | 7706cb01c0e22bea0f4b583f3e6bc0ee06b224d0 (patch) | |
tree | 2e6d615738da0b38e2308b298b66ca5b7b89dd5d | |
parent | e63d44c2a9d2a95c7f23de189966be0a3dcc5923 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr68445.c | 19 | ||||
-rw-r--r-- | gcc/tree-vect-slp.c | 12 |
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; } } |