diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 63e7c3c7ace..457e8e6d449 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-11-30 Ira Rosen + + PR tree-opt/18607 + * tree-vectorizer.c (vect_analyze_data_refs): Use temporary + variable for data_reference when looking for memtag. + 2004-11-30 Jakub Jelinek * c-opts.c (check_deps_environment_vars): If spec != NULL, set diff --git a/gcc/testsuite/gcc.dg/vect/vect-89.c b/gcc/testsuite/gcc.dg/vect/vect-89.c new file mode 100644 index 00000000000..754e984bada --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-89.c @@ -0,0 +1,46 @@ +/* { dg-require-effective-target vect_int } */ + +#include +#include "tree-vect.h" + +#define N 16 + +struct tmp_struct +{ + int x; + int y[N]; +}; + +int main1 () +{ + int i, *q; + struct tmp_struct tmp, *p; + + p = &tmp; + q = p->y; + + for (i = 0; i < N; i++) + { + *q++ = 5; + } + + /* check results: */ + for (i = 0; i < N; i++) + { + if (p->y[i] != 5) + { + abort (); + } + } + + return 0; +} + +int main (void) +{ + check_vect (); + + return main1 (); +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index 7aa6175efdd..0f49a323ddc 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -4899,7 +4899,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) int nbbs = loop->num_nodes; block_stmt_iterator si; int j; - struct data_reference *dr; + struct data_reference *dr, *tmp_dr; tree tag; tree address_base; bool base_aligned_p; @@ -5013,9 +5013,9 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo) switch (TREE_CODE (address_base)) { case ARRAY_REF: - dr = analyze_array (stmt, TREE_OPERAND (symbl, 0), - DR_IS_READ(dr)); - tag = vect_get_base_and_bit_offset (dr, DR_BASE_NAME (dr), + tmp_dr = analyze_array (stmt, TREE_OPERAND (symbl, 0), + DR_IS_READ (tmp_dr)); + tag = vect_get_base_and_bit_offset (tmp_dr, DR_BASE_NAME (tmp_dr), NULL_TREE, loop_vinfo, &offset, &base_aligned_p); if (!tag) {