Code review to compile with -ansi
[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_ */