X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firouts.c;h=3804180a1ecd8eb7bd6b054ef4aa8f22ad215de3;hb=f264ce75119a508da0f07bd89aa90ddcdb5732f8;hp=fb5d6500c1099d425b4ec26690468cd039b490b2;hpb=1479bfdba32d70f164f61f1bdc8e31190df1269f;p=libfirm diff --git a/ir/ana/irouts.c b/ir/ana/irouts.c index fb5d6500c..3804180a1 100644 --- a/ir/ana/irouts.c +++ b/ir/ana/irouts.c @@ -24,13 +24,9 @@ * @date 1.2002 * @version $Id$ */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif -#ifdef HAVE_STRING_H #include -#endif #include "xmalloc.h" #include "irouts.h" @@ -266,8 +262,7 @@ void irg_out_block_walk(ir_node *node, for (i = 0, n = get_irn_n_outs(node); i < n; ++i) { ir_node *succ = get_irn_out(node, i); - if (get_irn_visited(succ) < get_irg_visited(current_ir_graph)) - irg_out_walk_2(succ, pre, post, env); + irg_out_block_walk2(succ, pre, post, env); } } else { @@ -316,7 +311,7 @@ static int _count_outs(ir_node *n) { } /* count Def-Use edges for predecessors */ - if (irn_not_visited(skipped_pred)) + if (!irn_visited(skipped_pred)) res += _count_outs(skipped_pred); /*count my Def-Use edges */ @@ -340,9 +335,7 @@ static int count_outs(ir_graph *irg) { even if they are not visible. */ for (i = anchor_last - 1; i >= 0; --i) { n = get_irg_anchor(irg, i); - if (irn_not_visited(n)) { - mark_irn_visited(n); - + if (!irn_visited_else_mark(n)) { n->out = INT_TO_PTR(1); ++res; } @@ -382,7 +375,7 @@ static ir_def_use_edge *_set_out_edges(ir_node *use, ir_def_use_edge *free) { ir_node *def = get_irn_n(use, i); /* Recursion */ - if (irn_not_visited(def)) + if (!irn_visited(def)) free = _set_out_edges(def, free); /* Remember this Def-Use edge */ @@ -414,9 +407,7 @@ static ir_def_use_edge *set_out_edges(ir_graph *irg, ir_def_use_edge *free) { /* handle anchored nodes */ for (i = anchor_last - 1; i >= 0; --i) { n = get_irg_anchor(irg, i); - if (irn_not_visited(n)) { - mark_irn_visited(n); - + if (!irn_visited_else_mark(n)) { n_outs = PTR_TO_INT(n->out); n->out = free; #ifdef DEBUG_libfirm @@ -429,32 +420,6 @@ static ir_def_use_edge *set_out_edges(ir_graph *irg, ir_def_use_edge *free) { return free; } - -/** - * We want that the out of ProjX from Start contains the next block at - * position 0, the Start block at position 1. This is necessary for - * the out block walker. - */ -static INLINE void fix_start_proj(ir_graph *irg) { - ir_node *startbl = get_irg_start_block(irg); - - if (get_Block_n_cfg_outs(startbl)) { - ir_node *proj = get_irg_initial_exec(irg); - ir_node *irn; - int block_pos, other_pos; - - if (get_irn_n_outs(proj) == 2) { - if (get_irn_out_ex(proj, 0, &block_pos) == startbl) { - irn = get_irn_out_ex(proj, 1, &other_pos); - set_irn_out(proj, 0, irn, other_pos); - set_irn_out(proj, 1, startbl, block_pos); - } - } else { - assert(get_irg_phase_state(irg) == phase_backend); - } - } -} - /* compute the outs for a given graph */ void compute_irg_outs(ir_graph *irg) { ir_graph *rem = current_ir_graph; @@ -474,7 +439,7 @@ void compute_irg_outs(ir_graph *irg) { n_out_edges = count_outs(irg); /* allocate memory for all out edges. */ - irg->outs = xcalloc(n_out_edges, sizeof(irg->outs[0])); + irg->outs = XMALLOCNZ(ir_def_use_edge, n_out_edges); #ifdef DEBUG_libfirm irg->n_outs = n_out_edges; #endif /* defined DEBUG_libfirm */ @@ -486,11 +451,6 @@ void compute_irg_outs(ir_graph *irg) { /* Check how much memory we have used */ assert (end == (irg->outs + n_out_edges)); - /* We want that the out of ProjX from Start contains the next block at - position 0, the Start block at position 1. This is necessary for - code placement (place_early() ONLY if started GCSE on graphs with dead blocks) */ - fix_start_proj(irg); - current_ir_graph->outs_state = outs_consistent; current_ir_graph = rem; } @@ -635,7 +595,7 @@ void compute_ip_outs(void) { } global_count = n_out_edges = count_ip_outs(); - out_edges = xcalloc(n_out_edges, sizeof(out_edges[0])); + out_edges = XMALLOCNZ(ir_node*, n_out_edges); set_irp_ip_outedges(out_edges); set_ip_outs(); }