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