aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIra Rosen <irar@il.ibm.com>2004-11-30 14:40:38 +0000
committerDorit Nuzman <dorit@gcc.gnu.org>2004-11-30 14:40:38 +0000
commitf2b60e4039b662779ffc4a59eacb186b5b821cd6 (patch)
tree145401d23e39193da659af0881fee2965fca8448 /gcc
parent1b3c8f4655e63309012ab8054699b47d9b64b9fe (diff)
downloadgcc-f2b60e4039b662779ffc4a59eacb186b5b821cd6.zip
gcc-f2b60e4039b662779ffc4a59eacb186b5b821cd6.tar.gz
gcc-f2b60e4039b662779ffc4a59eacb186b5b821cd6.tar.bz2
re PR tree-optimization/18607 (Vectorizer: data_reference is overwritten in vect_analyze_data_refs)
2004-11-30 Ira Rosen <irar@il.ibm.com> PR tree-opt/18607 * tree-vectorizer.c (vect_analyze_data_refs): Use temporary variable for data_reference when looking for memtag. From-SVN: r91521
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-89.c46
-rw-r--r--gcc/tree-vectorizer.c8
3 files changed, 56 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 63e7c3c..457e8e6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-11-30 Ira Rosen <irar@il.ibm.com>
+
+ 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 <jakub@redhat.com>
* 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 0000000..754e984
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-89.c
@@ -0,0 +1,46 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#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 7aa6175..0f49a32 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)
{