some simple optimizations for execution speed
[libfirm] / ir / st / st.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/st/st.h
4  * Purpose:     Provide some auxilliary structures for firm graphs.
5  * Author:      Florian Liekweg
6  * Modified by:
7  * Created:     26.2.2002
8  * CVS-ID:      $Id$
9  * Copyright:   (c) 2002-2003 Universität Karlsruhe
10  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
11  */
12 /**
13    @file st.h
14
15    Provide some auxilliary structures for firm graphs.
16
17    @author Florian Liekweg
18
19    @note
20      not quite complete
21 */
22
23 # ifndef _ST_H_
24 # define _ST_H_
25
26 /* Includes:  */
27 #include "irgraph.h"
28 #include "irnode.h"
29
30 #include "bs.h"
31
32 #include <stdbool.h>
33
34
35 /* Data Types: */
36
37 /**  One dominator tree */
38 typedef struct
39 {
40   int n_blocks;
41   ir_graph *graph;      /**< PRE */
42   ir_node **blocks;
43   ir_node **idoms;      /**< idom [n] == immediate dominator of blocks [n] */
44   bs_t *masks;
45 }
46 dt_t;
47
48 /** List entry.  */
49 typedef struct dtree_t
50 {
51   dt_t *tree;
52   ir_graph *graph;
53
54   struct dtree_t *next;
55 }
56 dtree_t;
57
58 /** dominator environment for a node dom_env_t::a in graph dom_env_t::graph */
59 typedef struct dom_env_t
60 {
61   dt_t     *dt;
62   ir_graph *graph;
63   ir_node  *a;
64   int       index_a;
65   bs_t      mask;
66 } dom_env_t;
67
68 /* Forwards for Globals:  */
69 extern dtree_t *trees;
70 extern dtree_t *last;
71
72 /* Prototypes: */
73 void     st_build_dominator_tree (ir_graph*);
74 bool     dominates            (ir_graph*, ir_node*, ir_node*);
75 ir_node *get_idom             (ir_graph*, ir_node*);
76
77 dom_env_t *get_dom_env (ir_graph*, ir_node*);
78 void delete_dom_env (dom_env_t*);
79 bool dominates_l (dom_env_t*, ir_node*);
80
81 # endif /* defined _ST_H_ */