1 /* 2 * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. 3 * 4 * This file is part of libFirm. 5 * 6 * This file may be distributed and/or modified under the terms of the 7 * GNU General Public License version 2 as published by the Free Software 8 * Foundation and appearing in the file LICENSE.GPL included in the 9 * packaging of this file. 10 * 11 * Licensees holding valid libFirm Professional Edition licenses may use 12 * this file in accordance with the libFirm Commercial License. 13 * Agreement provided with the Software. 14 * 15 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 16 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE. 18 */ 19 20 /** 21 * @file 22 * @brief Construct and access dominator tree -- private datastructures. 23 * @author Goetz Lindenmaier 24 * @date 2.2002 25 */ 26 #ifndef FIRM_ANA_IRDOM_T_H 27 #define FIRM_ANA_IRDOM_T_H 28 29 #include "irdom.h" 30 #include "pmap.h" 31 #include "obst.h" 32 33 /** For dominator information */ 34 typedef struct ir_dom_info { 35 ir_node *idom; /**< immediate CFG dominator */ 36 ir_node *next; /**< The next node in the dominated list of @c idom. */ 37 ir_node *first; /**< The first node in the list of nodes 38 this nodes dominates immediately. */ 39 unsigned tree_pre_num; /**< The pre-order number from a dfs walk 40 over the dominator tree. */ 41 unsigned max_subtree_pre_num; /**< The largest tree pre num found in the 42 dominator subtree of this node. */ 43 int pre_num; /**< pre-order graph-walk number */ 44 int dom_depth; /**< depth in dominator-tree */ 45 } ir_dom_info; 46 47 typedef struct ir_dom_front_info_t { 48 pmap *df_map; /**< A map, mapping every block to a list of its dominance frontier blocks. */ 49 struct obstack obst; /**< An obstack holding all the frontier data. */ 50 } ir_dom_front_info_t; 51 52 void set_Block_idom(ir_node *bl, ir_node *n); 53 54 int get_Block_dom_depth(const ir_node *bl); 55 void set_Block_dom_depth(ir_node *bl, int depth); 56 57 int get_Block_dom_pre_num(const ir_node *bl); 58 void set_Block_dom_pre_num(ir_node *bl, int num); 59 60 void set_Block_ipostdom(ir_node *bl, ir_node *n); 61 62 int get_Block_postdom_depth(const ir_node *bl); 63 void set_Block_postdom_depth(ir_node *bl, int depth); 64 65 int get_Block_postdom_pre_num(const ir_node *bl); 66 void set_Block_postdom_pre_num(ir_node *bl, int num); 67 68 unsigned get_Block_dom_tree_pre_num(const ir_node *bl); 69 unsigned get_Block_pdom_tree_pre_num(const ir_node *bl); 70 71 unsigned get_Block_dom_max_subtree_pre_num(const ir_node *bl); 72 unsigned get_Block_pdom_max_subtree_pre_num(const ir_node *bl); 73 74 void ir_free_dominance_frontiers(ir_graph *irg); 75 76 #endif 77