the store. This is not the number of parameters
to the procedure! */
}
+ if (res->loc_descriptions) {
+ xfree(res->loc_descriptions);
+ res->loc_descriptions = NULL;
+ }
}
/* Allocates a list of nodes:
/* Proj results of start node */
projX = new_Proj(start, mode_X, pn_Start_X_initial_exec);
+ set_irg_initial_exec (res, projX);
set_irg_frame (res, new_Proj(start, mode_P_data, pn_Start_P_frame_base));
- set_irg_globals (res, new_Proj(start, mode_P_data, pn_Start_P_globals));
set_irg_tls (res, new_Proj(start, mode_P_data, pn_Start_P_tls));
set_irg_args (res, new_Proj(start, mode_T, pn_Start_T_args));
set_irg_value_param_base(res, new_Proj(start, mode_P_data, pn_Start_P_value_arg_base));
* @param env The copied graph.
*/
static void copy_all_nodes(ir_node *n, void *env) {
- ir_graph *irg = current_ir_graph;
+ ir_graph *irg = env;
ir_op *op = get_irn_op(n);
ir_node *nn;
static void set_all_preds(ir_node *irn, void *env) {
int i;
ir_node *nn, *pred;
- ir_graph *clone_irg = env;
+ (void) env;
nn = get_irn_link(irn);
res->phase_state = irg->phase_state;
- set_using_irn_link(irg);
+ ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK);
/* copy all nodes from the graph irg to the new graph res */
irg_walk_anchors(irg, copy_all_nodes, set_all_preds, res);
is different from the original one. */
res->estimated_node_count = irg->estimated_node_count;
- clear_using_irn_link(irg);
+ ir_free_resources(irg, IR_RESOURCE_IRN_LINK);
return res;
}
void free_ir_graph(ir_graph *irg) {
assert(is_ir_graph(irg));
+ edges_deactivate(irg);
+
hook_free_graph(irg);
if (irg->outs_state != outs_none)
free_irg_outs(irg);
}
ir_node *
-(get_irg_frame)(const ir_graph *irg) {
- return _get_irg_frame(irg);
+(get_irg_initial_exec)(const ir_graph *irg) {
+ return _get_irg_initial_exec(irg);
}
void
-(set_irg_frame)(ir_graph *irg, ir_node *node) {
- _set_irg_frame(irg, node);
+(set_irg_initial_exec)(ir_graph *irg, ir_node *node) {
+ _set_irg_initial_exec(irg, node);
}
ir_node *
-(get_irg_globals)(const ir_graph *irg) {
- return _get_irg_globals(irg);
+(get_irg_frame)(const ir_graph *irg) {
+ return _get_irg_frame(irg);
}
void
-(set_irg_globals)(ir_graph *irg, ir_node *node) {
- _set_irg_globals(irg, node);
+(set_irg_frame)(ir_graph *irg, ir_node *node) {
+ _set_irg_frame(irg, node);
}
ir_node *
}
#ifndef NDEBUG
-void set_using_block_visited(ir_graph *irg) {
- assert(irg->using_block_visited == 0);
- irg->using_block_visited = 1;
-}
-
-void clear_using_block_visited(ir_graph *irg) {
- assert(irg->using_block_visited == 1);
- irg->using_block_visited = 0;
+void ir_reserve_resources(ir_graph *irg, ir_resources_t resources)
+{
+ assert((irg->reserved_resources & resources) == 0);
+ irg->reserved_resources |= resources;
}
-int using_block_visited(const ir_graph *irg) {
- return irg->using_block_visited;
+void ir_free_resources(ir_graph *irg, ir_resources_t resources)
+{
+ assert((irg->reserved_resources & resources) == resources);
+ irg->reserved_resources &= ~resources;
}
-
-void set_using_irn_visited(ir_graph *irg) {
- assert(irg->using_irn_visited == 0);
- irg->using_irn_visited = 1;
-}
-
-void clear_using_irn_visited(ir_graph *irg) {
- assert(irg->using_irn_visited == 1);
- irg->using_irn_visited = 0;
+ir_resources_t ir_resources_reserved(const ir_graph *irg)
+{
+ return irg->reserved_resources;
}
-
-int using_irn_visited(const ir_graph *irg) {
- return irg->using_irn_visited;
-}
-
-
-void set_using_irn_link(ir_graph *irg) {
- assert(irg->using_irn_link == 0);
- irg->using_irn_link = 1;
-}
-
-void clear_using_irn_link(ir_graph *irg) {
- assert(irg->using_irn_link == 1);
- irg->using_irn_link = 0;
-}
-
-int using_irn_link(const ir_graph *irg) {
- return irg->using_irn_link;
-}
-#endif
+#endif /* NDEBUG */
/* Returns a estimated node count of the irg. */
unsigned (get_irg_estimated_node_cnt)(const ir_graph *irg) {