1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Martin Trapp, Christian Schaefer
6 ** irgraph.h: ir graph construction
16 /* to resolve recursion between irnode.h and irgraph.h */
17 #ifndef _IR_NODE_TYPEDEF_
18 #define _IR_NODE_TYPEDEF_
19 typedef struct ir_node ir_node;
22 /* ir_graph holds all information for a procedure */
24 struct entity *ent; /* The entity of this procedure, i.e.,
25 the type of the procedure and the
26 class it belongs to. */
27 struct ir_node *start_block; /* block the start node will belong to */
28 struct ir_node *start; /* start node of this ir_graph */
29 struct ir_node *end_block; /* block the end node will belong to */
30 struct ir_node *end; /* end node of this ir_graph */
31 struct ir_node *cstore; /* constant store -- no more needed!! */
32 struct ir_node *frame; /* method's frame */
33 struct ir_node *globals; /* pointer to the data segment containing all
34 globals as well as global procedures. */
35 struct ir_node *args; /* methods arguments */
36 struct ir_node *bad; /* bad node of this ir_graph, the one and
38 struct obstack *obst; /* obstack where all of the ir_nodes live */
39 #if USE_EXPICIT_PHI_IN_STACK
40 struct Phi_in_stack *Phi_in_stack; /* needed for automatic Phi construction */
42 struct ir_node *current_block; /* block for newly gen_*()-erated
44 int params; /* number of local variable in this
45 procedure; should be n_loc or so,
46 params is ambiguous. */
47 pset *value_table; /* value table for global value numbering
48 for optimizing use in iropt.c */
49 unsigned long visited; /* this flag is an identifier for
50 ir walk. it will be incremented,
51 every time, someone walk through
53 unsigned long block_visited; /* same as visited, for a
57 /* to resolve recursion between entity.h and irgraph.h */
58 #ifndef _IR_GRAPH_TYPEDEF_
59 #define _IR_GRAPH_TYPEDEF_
60 typedef struct ir_graph ir_graph;
63 /* Global variable holding the current_ir_graph. This global variable
64 is used by the ir construction interface in ircons and by the
66 extern ir_graph *current_ir_graph;
68 /* create a new ir graph. Automatically sets the field irg of
69 entity to the new ir graph. */
70 ir_graph *new_ir_graph (entity *ent, int params);
73 /* access routines for all ir_graph attributes */
74 ir_node *get_irg_start_block (ir_graph *irg);
75 void set_irg_start_block (ir_graph *irg, ir_node *node);
77 ir_node *get_irg_start (ir_graph *irg);
78 void set_irg_start (ir_graph *irg, ir_node *node);
80 ir_node *get_start_of_irgraph (ir_graph *irg);
81 void set_start_of_irgraph(ir_graph *irg, ir_node *node);
83 ir_node *get_irg_end_block (ir_graph *irg);
84 void set_irg_end_block (ir_graph *irg, ir_node *node);
86 ir_node *get_irg_end (ir_graph *irg);
87 void set_irg_end (ir_graph *irg, ir_node *node);
89 ir_node *get_irg_cstore (ir_graph *irg);
90 void set_irg_cstore (ir_graph *irg, ir_node *node);
92 ir_node *get_irg_frame (ir_graph *irg);
93 void set_irg_frame (ir_graph *irg, ir_node *node);
95 ir_node *get_irg_globals (ir_graph *irg);
96 void set_irg_globals (ir_graph *irg, ir_node *node);
98 ir_node *get_irg_args (ir_graph *irg);
99 void set_irg_args (ir_graph *irg, ir_node *node);
101 /* Use new_Bad() instead!! */
102 ir_node *get_irg_bad (ir_graph *irg);
103 void set_irg_bad (ir_graph *irg, ir_node *node);
105 /* not implemented yet
106 struct obstack *get_obst_of_irgraph (ir_graph *irg);
107 void set_obst_of_irgraph (ir_graph *irg, struct obstack *obst);
110 ir_node *get_irg_current_block (ir_graph *irg);
111 void set_irg_current_block (ir_graph *irg, ir_node *node);
113 entity *get_irg_ent (ir_graph *irg);
114 void set_irg_ent (ir_graph *irg, entity *ent);
116 int get_irg_params (ir_graph *irg);
117 void set_irg_params (ir_graph *irg, int params);
119 /* increments visited by one */
120 void inc_irg_visited(ir_graph *irg);
121 unsigned long get_irg_visited (ir_graph *irg);
122 void set_irg_visited(ir_graph *irg, unsigned long i);
124 /* increments block_visited by one */
125 void inc_irg_block_visited(ir_graph *irg);
126 unsigned long get_irg_block_visited (ir_graph *irg);
127 void set_irg_block_visited(ir_graph *irg, unsigned long i);
129 int get_params_of_irgraph (ir_graph *irg);
130 void set_params_of_irgraph (ir_graph *irg, int params);
132 # endif /* _IRGRAPH_H_ */