OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [domwalk.h] - Diff between revs 816 and 826

Only display areas with differences | Details | Blame | View Log

Rev 816 Rev 826
/* Generic dominator tree walker
/* Generic dominator tree walker
   Copyright (C) 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
   Copyright (C) 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
   Contributed by Diego Novillo <dnovillo@redhat.com>
   Contributed by Diego Novillo <dnovillo@redhat.com>
 
 
This file is part of GCC.
This file is part of GCC.
 
 
GCC is free software; you can redistribute it and/or modify
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
the Free Software Foundation; either version 3, or (at your option)
any later version.
any later version.
 
 
GCC is distributed in the hope that it will be useful,
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
GNU General Public License for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */
<http://www.gnu.org/licenses/>.  */
 
 
typedef void *void_p;
typedef void *void_p;
DEF_VEC_P(void_p);
DEF_VEC_P(void_p);
DEF_VEC_ALLOC_P(void_p,heap);
DEF_VEC_ALLOC_P(void_p,heap);
 
 
/* This is the main data structure for the dominator walker.  It provides
/* 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
   the callback hooks as well as a convenient place to hang block local
   data and pass-global data.  */
   data and pass-global data.  */
 
 
struct dom_walk_data
struct dom_walk_data
{
{
  /* This is the direction of the dominator tree we want to walk.  i.e.,
  /* 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_DOMINATORS, then we walk the dominator tree,
     if it is set to CDI_POST_DOMINATORS, then we walk the post
     if it is set to CDI_POST_DOMINATORS, then we walk the post
     dominator tree.  */
     dominator tree.  */
  ENUM_BITFIELD (cdi_direction) dom_direction : 2;
  ENUM_BITFIELD (cdi_direction) dom_direction : 2;
 
 
  /* Function to initialize block local data.
  /* Function to initialize block local data.
 
 
     Note that the dominator walker infrastructure may provide a new
     Note that the dominator walker infrastructure may provide a new
     fresh, and zero'd block local data structure, or it may re-use an
     fresh, and zero'd block local data structure, or it may re-use an
     existing block local data structure.
     existing block local data structure.
 
 
     If the block local structure has items such as virtual arrays, then
     If the block local structure has items such as virtual arrays, then
     that allows your optimizer to re-use those arrays rather than
     that allows your optimizer to re-use those arrays rather than
     creating new ones.  */
     creating new ones.  */
  void (*initialize_block_local_data) (struct dom_walk_data *,
  void (*initialize_block_local_data) (struct dom_walk_data *,
                                       basic_block, bool);
                                       basic_block, bool);
 
 
  /* Function to call before the recursive walk of the dominator children.  */
  /* Function to call before the recursive walk of the dominator children.  */
  void (*before_dom_children) (struct dom_walk_data *, basic_block);
  void (*before_dom_children) (struct dom_walk_data *, basic_block);
 
 
  /* Function to call after the recursive walk of the dominator children.  */
  /* Function to call after the recursive walk of the dominator children.  */
  void (*after_dom_children) (struct dom_walk_data *, basic_block);
  void (*after_dom_children) (struct dom_walk_data *, basic_block);
 
 
  /* Global data for a walk through the dominator tree.  */
  /* Global data for a walk through the dominator tree.  */
  void *global_data;
  void *global_data;
 
 
  /* Stack of any data we need to keep on a per-block basis.
  /* 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.  */
     If you have no local data, then BLOCK_DATA_STACK will be NULL.  */
  VEC(void_p,heap) *block_data_stack;
  VEC(void_p,heap) *block_data_stack;
 
 
  /* Size of the block local data.   If this is zero, then it is assumed
  /* 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.  */
     you have no local data and thus no BLOCK_DATA_STACK as well.  */
  size_t block_local_data_size;
  size_t block_local_data_size;
 
 
  /* From here below are private data.  Please do not use this
  /* From here below are private data.  Please do not use this
     information/data outside domwalk.c.  */
     information/data outside domwalk.c.  */
 
 
  /* Stack of available block local structures.  */
  /* Stack of available block local structures.  */
  VEC(void_p,heap) *free_block_data;
  VEC(void_p,heap) *free_block_data;
};
};
 
 
void walk_dominator_tree (struct dom_walk_data *, basic_block);
void walk_dominator_tree (struct dom_walk_data *, basic_block);
void init_walk_dominator_tree (struct dom_walk_data *);
void init_walk_dominator_tree (struct dom_walk_data *);
void fini_walk_dominator_tree (struct dom_walk_data *);
void fini_walk_dominator_tree (struct dom_walk_data *);
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.