OSDN Git Service

2004-11-30 Ira Rosen <irar@il.ibm.com>
authordorit <dorit@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Nov 2004 14:40:38 +0000 (14:40 +0000)
committerdorit <dorit@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Nov 2004 14:40:38 +0000 (14:40 +0000)
        PR tree-opt/18607
        * tree-vectorizer.c (vect_analyze_data_refs): Use temporary
        variable for data_reference when looking for memtag.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91521 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/gcc.dg/vect/vect-89.c [new file with mode: 0644]
gcc/tree-vectorizer.c

index 63e7c3c..457e8e6 100644 (file)
@@ -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 (file)
index 0000000..754e984
--- /dev/null
@@ -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" } } */
index 7aa6175..0f49a32 100644 (file)
@@ -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)
                    {