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