Implemented debug support.
[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
27 #define true TRUE
28 #define false FALSE
29
30 // Data Types:
31
32 // One dominator tree
33 typedef struct
34 {
35   int n_blocks;
36   ir_graph *graph;                              // PRE
37   ir_node **blocks;
38   ir_node **idoms;                              // idom [n] == immediate dominator of blocks [n]
39   bs_t *masks;
40 }
41 dt_t;
42
43 // List entry:
44 typedef struct dtree_t
45 {
46   dt_t *tree;
47   ir_graph *graph;
48
49   struct dtree_t *next;
50 }
51 dtree_t;
52
53 // dominator environment for a node @a in graph @graph
54 typedef struct dom_env_t
55 {
56   dt_t     *dt;
57   ir_graph *graph;
58   ir_node  *a;
59   int       index_a;
60   bs_t      mask;
61 } dom_env_t;
62
63 // Forwards for Globals:
64 extern dtree_t *trees;
65 extern dtree_t *last;
66
67 // Prototypes:
68 void     st_build_dominator_tree (ir_graph*);
69 bool     dominates            (ir_graph*, ir_node*, ir_node*);
70 ir_node *get_idom             (ir_graph*, ir_node*);
71
72 dom_env_t *get_dom_env (ir_graph*, ir_node*);
73 void delete_dom_env (dom_env_t*);
74 bool dominates_l (dom_env_t*, ir_node*);
75
76 # endif /* defined _ST_H_ */