From: rguenth Date: Tue, 23 Jun 2015 13:56:34 +0000 (+0000) Subject: 2015-06-23 Richard Biener X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c1c0e9ee89f7776ec8fddc692efa7453430d291e;p=thirdparty%2Fgcc.git 2015-06-23 Richard Biener 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@224841 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f7d60f530607..bc1d0fd9ac8c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-06-23 Richard Biener + + 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 * config/nvptx/nvptx.md (sel_true, sel_false): New diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f305d812d468..65ad0c482c19 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-06-23 Richard Biener + + PR tree-optimization/66636 + * gcc.dg/vect/pr66636.c: New testcase. + 2015-06-23 Marek Polacek * 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 000000000000..7e6e5f6752e5 --- /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 0b9c8d6e1f96..cac4768af0bb 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++)