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