2009-06-30 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Jun 2009 09:55:34 +0000 (09:55 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Jun 2009 09:55:34 +0000 (09:55 +0000)
* tree-ssa-alias.c (walk_aliased_vdefs_1): Change interface to
use ao_ref references.
(walk_aliased_vdefs): Likewise.
* tree-ssa-alias.h (walk_aliased_vdefs): Adjust prototype.
* tree-ssa-dce.c (struct ref_data): Remove.
(mark_aliased_reaching_defs_necessary_1): Use the ao_ref argument.
(mark_aliased_reaching_defs_necessary): Adjust.
(mark_all_reaching_defs_necessary_1): Likewise.

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

gcc/ChangeLog
gcc/tree-ssa-alias.c
gcc/tree-ssa-alias.h
gcc/tree-ssa-dce.c

index fe12202..af585a4 100644 (file)
@@ -1,3 +1,14 @@
+2009-06-30  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-alias.c (walk_aliased_vdefs_1): Change interface to
+       use ao_ref references.
+       (walk_aliased_vdefs): Likewise.
+       * tree-ssa-alias.h (walk_aliased_vdefs): Adjust prototype.
+       * tree-ssa-dce.c (struct ref_data): Remove.
+       (mark_aliased_reaching_defs_necessary_1): Use the ao_ref argument.
+       (mark_aliased_reaching_defs_necessary): Adjust.
+       (mark_all_reaching_defs_necessary_1): Likewise.
+
 2009-06-30  Paolo Bonzini  <bonzini@gnu.org>
 
        PR boostrap/40597
index e8bca84..4d72187 100644 (file)
@@ -1427,8 +1427,8 @@ walk_non_aliased_vuses (ao_ref *ref, tree vuse,
    The function returns the number of statements walked.  */
 
 static unsigned int
-walk_aliased_vdefs_1 (tree ref, tree vdef,
-                     bool (*walker)(tree, tree, void *), void *data,
+walk_aliased_vdefs_1 (ao_ref *ref, tree vdef,
+                     bool (*walker)(ao_ref *, tree, void *), void *data,
                      bitmap *visited, unsigned int cnt)
 {
   do
@@ -1455,7 +1455,7 @@ walk_aliased_vdefs_1 (tree ref, tree vdef,
       /* ???  Do we want to account this to TV_ALIAS_STMT_WALK?  */
       cnt++;
       if ((!ref
-          || stmt_may_clobber_ref_p (def_stmt, ref))
+          || stmt_may_clobber_ref_p_1 (def_stmt, ref))
          && (*walker) (ref, vdef, data))
        return cnt;
 
@@ -1465,8 +1465,8 @@ walk_aliased_vdefs_1 (tree ref, tree vdef,
 }
 
 unsigned int
-walk_aliased_vdefs (tree ref, tree vdef,
-                   bool (*walker)(tree, tree, void *), void *data,
+walk_aliased_vdefs (ao_ref *ref, tree vdef,
+                   bool (*walker)(ao_ref *, tree, void *), void *data,
                    bitmap *visited)
 {
   bitmap local_visited = NULL;
index b071e4b..2be903f 100644 (file)
@@ -100,9 +100,9 @@ extern bool stmt_may_clobber_ref_p_1 (gimple, ao_ref *);
 extern void *walk_non_aliased_vuses (ao_ref *, tree,
                                     void *(*)(ao_ref *, tree, void *),
                                     void *(*)(ao_ref *, tree, void *), void *);
-extern unsigned int walk_aliased_vdefs (tree, tree,
-                                       bool (*)(tree, tree, void *), void *,
-                                       bitmap *);
+extern unsigned int walk_aliased_vdefs (ao_ref *, tree,
+                                       bool (*)(ao_ref *, tree, void *),
+                                       void *, bitmap *);
 extern struct ptr_info_def *get_ptr_info (tree);
 extern void dump_alias_info (FILE *);
 extern void debug_alias_info (void);
index b252ece..0cb8ac6 100644 (file)
@@ -452,13 +452,6 @@ ref_may_be_aliased (tree ref)
           && !may_be_aliased (ref));
 }
 
-struct ref_data {
-  tree base;
-  HOST_WIDE_INT size;
-  HOST_WIDE_INT offset;
-  HOST_WIDE_INT max_size;
-};
-
 static bitmap visited = NULL;
 static unsigned int longest_chain = 0;
 static unsigned int total_chain = 0;
@@ -471,10 +464,10 @@ static bool chain_ovfl = false;
    anymore.  DATA points to cached get_ref_base_and_extent data for REF.  */
 
 static bool
-mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data)
+mark_aliased_reaching_defs_necessary_1 (ao_ref *ref, tree vdef,
+                                       void *data ATTRIBUTE_UNUSED)
 {
   gimple def_stmt = SSA_NAME_DEF_STMT (vdef);
-  struct ref_data *refd = (struct ref_data *)data;
 
   /* All stmts we visit are necessary.  */
   mark_operand_necessary (vdef);
@@ -485,22 +478,24 @@ mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data)
     {
       tree base, lhs = gimple_get_lhs (def_stmt);
       HOST_WIDE_INT size, offset, max_size;
+      ao_ref_base (ref);
       base = get_ref_base_and_extent (lhs, &offset, &size, &max_size);
       /* We can get MEM[symbol: sZ, index: D.8862_1] here,
         so base == refd->base does not always hold.  */
-      if (base == refd->base)
+      if (base == ref->base)
        {
          /* For a must-alias check we need to be able to constrain
             the accesses properly.  */
          if (size != -1 && size == max_size
-             && refd->max_size != -1)
+             && ref->max_size != -1)
            {
-             if (offset <= refd->offset
-                 && offset + size >= refd->offset + refd->max_size)
+             if (offset <= ref->offset
+                 && offset + size >= ref->offset + ref->max_size)
                return true;
            }
          /* Or they need to be exactly the same.  */
-         else if (operand_equal_p (ref, lhs, 0))
+         else if (ref->ref
+                  && operand_equal_p (ref->ref, lhs, 0))
            return true;
        }
     }
@@ -512,14 +507,13 @@ mark_aliased_reaching_defs_necessary_1 (tree ref, tree vdef, void *data)
 static void
 mark_aliased_reaching_defs_necessary (gimple stmt, tree ref)
 {
-  struct ref_data refd;
   unsigned int chain;
+  ao_ref refd;
   gcc_assert (!chain_ovfl);
-  refd.base = get_ref_base_and_extent (ref, &refd.offset, &refd.size,
-                                      &refd.max_size);
-  chain = walk_aliased_vdefs (ref, gimple_vuse (stmt),
+  ao_ref_init (&refd, ref);
+  chain = walk_aliased_vdefs (&refd, gimple_vuse (stmt),
                              mark_aliased_reaching_defs_necessary_1,
-                             &refd, NULL);
+                             NULL, NULL);
   if (chain > longest_chain)
     longest_chain = chain;
   total_chain += chain;
@@ -532,8 +526,8 @@ mark_aliased_reaching_defs_necessary (gimple stmt, tree ref)
    a non-aliased decl.  */
 
 static bool
-mark_all_reaching_defs_necessary_1 (tree ref ATTRIBUTE_UNUSED,
-                               tree vdef, void *data ATTRIBUTE_UNUSED)
+mark_all_reaching_defs_necessary_1 (ao_ref *ref ATTRIBUTE_UNUSED,
+                                   tree vdef, void *data ATTRIBUTE_UNUSED)
 {
   gimple def_stmt = SSA_NAME_DEF_STMT (vdef);