X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeifg.c;h=f7f173c4e20d8d4c6f5db0701ae1f264a05e6b38;hb=f2c2e45eb4e677fef5bf6a8e418b2a22441172d5;hp=8a44fe9c0b134b011b84584cb0b22d12e7cace1d;hpb=049e7746fb729a28e90e69f02899c76c7b98b275;p=libfirm diff --git a/ir/be/beifg.c b/ir/be/beifg.c index 8a44fe9c0..f7f173c4e 100644 --- a/ir/be/beifg.c +++ b/ir/be/beifg.c @@ -24,9 +24,7 @@ * @date 18.11.2005 * @version $Id$ */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include @@ -59,7 +57,6 @@ typedef struct _coloring_t coloring_t; struct _coloring_t { ir_phase ph; - const arch_env_t *arch_env; ir_graph *irg; }; @@ -80,16 +77,15 @@ size_t (be_ifg_cliques_iter_size)(const be_ifg_t *ifg) static void *regs_irn_data_init(ir_phase *ph, const ir_node *irn, void *data) { - coloring_t *coloring = (coloring_t *) ph; - (void) data; + (void)ph; + (void)data; - return (void *) arch_get_irn_register(coloring->arch_env, irn); + return (void*)arch_get_irn_register(irn); } -coloring_t *coloring_init(coloring_t *c, ir_graph *irg, const arch_env_t *aenv) +static coloring_t *coloring_init(coloring_t *c, ir_graph *irg) { phase_init(&c->ph, "regs_map", irg, PHASE_DEFAULT_GROWTH, regs_irn_data_init, NULL); - c->arch_env = aenv; c->irg = irg; return c; } @@ -105,15 +101,15 @@ static void restore_irn_color(ir_node *irn, void *c) coloring_t *coloring = c; const arch_register_t *reg = phase_get_irn_data(&coloring->ph, irn); if(reg) - arch_set_irn_register(coloring->arch_env, irn, reg); + arch_set_irn_register(irn, reg); } -void coloring_save(coloring_t *c) +static void coloring_save(coloring_t *c) { irg_walk_graph(c->irg, NULL, get_irn_color, c); } -void coloring_restore(coloring_t *c) +static void coloring_restore(coloring_t *c) { irg_walk_graph(c->irg, NULL, restore_irn_color, c); } @@ -184,7 +180,7 @@ int be_ifg_is_simplicial(const be_ifg_t *ifg, const ir_node *irn) int degree = be_ifg_degree(ifg, irn); void *iter = be_ifg_neighbours_iter_alloca(ifg); - ir_node **neighbours = xmalloc(degree * sizeof(neighbours[0])); + ir_node **neighbours = XMALLOCN(ir_node*, degree); ir_node *curr; int i, j; @@ -276,7 +272,7 @@ void be_ifg_check_sorted(const be_ifg_t *ifg) const int node_count = be_ifg_check_get_node_count(ifg); int i = 0; - ir_node **all_nodes = xmalloc(node_count * sizeof(all_nodes[0])); + ir_node **all_nodes = XMALLOCN(ir_node*, node_count); be_ifg_foreach_node(ifg, iter1, n) { @@ -294,7 +290,7 @@ void be_ifg_check_sorted(const be_ifg_t *ifg) for (i = 0; i < node_count; i++) { - ir_node **neighbours = xmalloc(node_count * sizeof(neighbours[0])); + ir_node **neighbours = XMALLOCN(ir_node*, node_count); int j = 0; int k = 0; int degree = 0; @@ -334,7 +330,7 @@ void be_ifg_check_sorted_to_file(const be_ifg_t *ifg, FILE *f) const int node_count = be_ifg_check_get_node_count(ifg); int i = 0; - ir_node **all_nodes = xmalloc(node_count * sizeof(all_nodes[0])); + ir_node **all_nodes = XMALLOCN(ir_node*, node_count); be_ifg_foreach_node(ifg, iter1, n) { @@ -352,7 +348,7 @@ void be_ifg_check_sorted_to_file(const be_ifg_t *ifg, FILE *f) for (i = 0; i < node_count; i++) { - ir_node **neighbours = xmalloc(node_count * sizeof(neighbours[0])); + ir_node **neighbours = XMALLOCN(ir_node*, node_count); int j = 0; int k = 0; int degree = 0; @@ -400,7 +396,7 @@ void be_ifg_check_performance(be_chordal_env_t *chordal_env) if (get_irg_estimated_node_cnt(chordal_env->irg) >= BE_CH_PERFORMANCETEST_MIN_NODES) { - coloring_init(&coloring, chordal_env->irg, chordal_env->birg->main_env->arch_env); + coloring_init(&coloring, chordal_env->irg); coloring_save(&coloring); ir_timer_reset(timer); @@ -640,16 +636,20 @@ void be_ifg_dump_dot(be_ifg_t *ifg, ir_graph *irg, FILE *file, const be_ifg_dump bitset_free(nodes); } -static void int_comp_rec(be_irg_t *birg, be_ifg_t *ifg, ir_node *n, bitset_t *seen) +static void int_comp_rec(be_ifg_t *ifg, ir_node *n, bitset_t *seen) { void *neigh_it = be_ifg_neighbours_iter_alloca(ifg); ir_node *m; be_ifg_foreach_neighbour(ifg, neigh_it, n, m) { - if(!bitset_contains_irn(seen, m) && !arch_irn_is(birg->main_env->arch_env, m, ignore)) { - bitset_add_irn(seen, m); - int_comp_rec(birg, ifg, m, seen); - } + if (bitset_contains_irn(seen, m)) + continue; + + if (arch_get_register_req_out(m)->type & arch_register_req_type_ignore) + continue; + + bitset_add_irn(seen, m); + int_comp_rec(ifg, m, seen); } } @@ -663,11 +663,15 @@ static int int_component_stat(be_irg_t *birg, be_ifg_t *ifg) ir_node *n; be_ifg_foreach_node(ifg, nodes_it, n) { - if (! bitset_contains_irn(seen, n) && ! arch_irn_is(birg->main_env->arch_env, n, ignore)) { - ++n_comp; - bitset_add_irn(seen, n); - int_comp_rec(birg, ifg, n, seen); - } + if (bitset_contains_irn(seen, n)) + continue; + + if (arch_get_register_req_out(n)->type & arch_register_req_type_ignore) + continue; + + ++n_comp; + bitset_add_irn(seen, n); + int_comp_rec(ifg, n, seen); } free(seen);