OSDN Git Service

PR middle-end/26983
[pf3gnuchains/gcc-fork.git] / gcc / domwalk.h
index d477833..740c006 100644 (file)
@@ -1,5 +1,5 @@
 /* Generic dominator tree walker
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
    Contributed by Diego Novillo <dnovillo@redhat.com>
 
 This file is part of GCC.
@@ -16,8 +16,12 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+typedef void *void_p;
+DEF_VEC_P(void_p);
+DEF_VEC_ALLOC_P(void_p,heap);
 
 /* This is the main data structure for the dominator walker.  It provides
    the callback hooks as well as a convenient place to hang block local
@@ -25,7 +29,7 @@ Boston, MA 02111-1307, USA.  */
 
 struct dom_walk_data
 {
-  /* This is the direction of the dominator tree we want to walk.  ie,
+  /* This is the direction of the dominator tree we want to walk.  i.e.,
      if it is set to CDI_DOMINATORS, then we walk the dominator tree,
      if it is set to CDI_POST_DOMINATORS, then we walk the post
      dominator tree.  */
@@ -55,7 +59,7 @@ struct dom_walk_data
   /* Function to call before the statement walk occurring before the
      recursive walk of the dominator children. 
 
-     This typically initializes an block local data and pushes that
+     This typically initializes a block local data and pushes that
      data onto BLOCK_DATA_STACK.  */
   void (*before_dom_children_before_stmts) (struct dom_walk_data *,
                                            basic_block);
@@ -94,7 +98,7 @@ struct dom_walk_data
   /* Stack of any data we need to keep on a per-block basis.
 
      If you have no local data, then BLOCK_DATA_STACK will be NULL.  */
-  varray_type block_data_stack;
+  VEC(void_p,heap) *block_data_stack;
 
   /* Size of the block local data.   If this is zero, then it is assumed
      you have no local data and thus no BLOCK_DATA_STACK as well.  */
@@ -103,8 +107,16 @@ struct dom_walk_data
   /* From here below are private data.  Please do not use this
      information/data outside domwalk.c.  */
 
-  /* Stack of available block local structures.   */
-  varray_type free_block_data;
+  /* Stack of available block local structures.  */
+  VEC(void_p,heap) *free_block_data;
+
+  /* Interesting blocks to process.  If this field is not NULL, this
+     set is used to determine which blocks to walk.  If we encounter
+     block I in the dominator traversal, but block I is not present in
+     INTERESTING_BLOCKS, then none of the callback functions are
+     invoked on it.  This is useful when a particular traversal wants
+     to filter out non-interesting blocks from the dominator tree.  */
+  sbitmap interesting_blocks;
 };
 
 void walk_dominator_tree (struct dom_walk_data *, basic_block);