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