diff options
author | Richard Biener <rguenther@suse.de> | 2015-06-23 13:56:34 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-06-23 13:56:34 +0000 |
commit | c079cbacb722ed8d9219a4c0518e87fdb1b70b3a (patch) | |
tree | 11289929086e99170604d38a936f84634840f668 /gcc | |
parent | 224b491b09a88cff2f91b15b763fb785114655af (diff) | |
download | gcc-c079cbacb722ed8d9219a4c0518e87fdb1b70b3a.zip gcc-c079cbacb722ed8d9219a4c0518e87fdb1b70b3a.tar.gz gcc-c079cbacb722ed8d9219a4c0518e87fdb1b70b3a.tar.bz2 |
re PR tree-optimization/66636 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect-stmts.c:1590)
2015-06-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/66636
* tree-vect-stmts.c (vectorizable_store): Properly compute the
def type for further defs for strided stores.
* gcc.dg/vect/pr66636.c: New testcase.
From-SVN: r224841
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr66636.c | 29 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 6 |
4 files changed, 45 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f7d60f5..bc1d0fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-06-23 Richard Biener <rguenther@suse.de> + + PR tree-optimization/66636 + * tree-vect-stmts.c (vectorizable_store): Properly compute the + def type for further defs for strided stores. + 2015-06-23 Nathan Sidwell <nathan@codesourcery.com> * config/nvptx/nvptx.md (sel_true<mode>, sel_false<mode>): New diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f305d81..65ad0c4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-06-23 Richard Biener <rguenther@suse.de> + + PR tree-optimization/66636 + * gcc.dg/vect/pr66636.c: New testcase. + 2015-06-23 Marek Polacek <polacek@redhat.com> * gcc.dg/fold-minus-4.c: New test. diff --git a/gcc/testsuite/gcc.dg/vect/pr66636.c b/gcc/testsuite/gcc.dg/vect/pr66636.c new file mode 100644 index 0000000..7e6e5f6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr66636.c @@ -0,0 +1,29 @@ +/* { dg-additional-options "-mavx2" { target avx_runtime } } */ + +#include "tree-vect.h" + +extern void abort (void); + +struct X { double x; double y; }; + +void foo (struct X *x, double px, int s) +{ + int i; + for (i = 0; i < 256; ++i) + { + x[i*s].x = px; + x[i*s].y = i + px; + } +} + +int main() +{ + struct X x[512]; + int i; + check_vect (); + foo (x, 1., 2); + if (x[0].x != 1. || x[0].y != 1. + || x[510].x != 1. || x[510].y != 256.) + abort (); + return 0; +} diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 0b9c8d6..cac4768 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -5365,7 +5365,11 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, if (slp) vec_oprnd = vec_oprnds[j]; else - vec_oprnd = vect_get_vec_def_for_stmt_copy (dt, vec_oprnd); + { + vect_is_simple_use (vec_oprnd, NULL, loop_vinfo, + bb_vinfo, &def_stmt, &def, &dt); + vec_oprnd = vect_get_vec_def_for_stmt_copy (dt, vec_oprnd); + } } for (i = 0; i < nstores; i++) |