X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeifg.c;h=9220441c88a4339223806e3357802fa1ed5deebe;hb=59e2d36967edfaaa770afdf3d498bed3b39e55ee;hp=cdfed376fedf25e933f141f644013e84ed8be42f;hpb=f8cc15664f571aa7ef89d6f6bc8d5bd2b8ca7d53;p=libfirm diff --git a/ir/be/beifg.c b/ir/be/beifg.c index cdfed376f..9220441c8 100644 --- a/ir/be/beifg.c +++ b/ir/be/beifg.c @@ -36,7 +36,6 @@ #include "irnode_t.h" #include "irprintf.h" #include "irtools.h" -#include "irbitset.h" #include "beifg.h" #include "error.h" #include "xmalloc.h" @@ -62,7 +61,6 @@ static void nodes_walker(ir_node *bl, void *data) { nodes_iter_t *it = (nodes_iter_t*)data; struct list_head *head = get_block_border_head(it->env, bl); - border_t *b; foreach_border_head(head, b) { if (b->is_def && b->is_real) { @@ -126,7 +124,6 @@ static void find_neighbour_walker(ir_node *block, void *data) struct list_head *head = get_block_border_head(it->env, block); be_lv_t *lv = be_get_irg_liveness(it->env->irg); - border_t *b; int has_started = 0; if (!be_is_live_in(lv, block, it->irn) && block != get_nodes_block(it->irn)) @@ -187,7 +184,7 @@ ir_node *be_ifg_neighbours_begin(const be_ifg_t *ifg, neighbours_iter_t *iter, const ir_node *irn) { find_neighbours(ifg, iter, irn); - return ir_nodeset_iterator_next(&iter->iter); + return get_next_neighbour(iter); } ir_node *be_ifg_neighbours_next(neighbours_iter_t *iter) @@ -245,11 +242,9 @@ static inline int get_next_clique(cliques_iter_t *it) /* before shrinking the set, return the current maximal clique */ if (output_on_shrink) { int count = 0; - ir_node *irn; /* fill the output buffer */ - for (irn = (ir_node*)pset_first(it->living); irn != NULL; - irn = (ir_node*)pset_next(it->living)) { + foreach_pset(it->living, ir_node, irn) { it->buf[count++] = irn; } @@ -275,10 +270,8 @@ static inline int get_next_clique(cliques_iter_t *it) int be_ifg_cliques_begin(const be_ifg_t *ifg, cliques_iter_t *it, ir_node **buf) { - ir_node *start_bl = get_irg_start_block(ifg->env->irg); - obstack_init(&it->ob); - dom_tree_walk(start_bl, get_blocks_dom_order, NULL, it); + dom_tree_walk_irg(ifg->env->irg, get_blocks_dom_order, NULL, it); it->cenv = ifg->env; it->buf = buf; @@ -319,68 +312,20 @@ be_ifg_t *be_create_ifg(const be_chordal_env_t *env) return ifg; } -void be_ifg_dump_dot(be_ifg_t *ifg, ir_graph *irg, FILE *file, const be_ifg_dump_dot_cb_t *cb, void *self) -{ - nodes_iter_t nodes_it; - neighbours_iter_t neigh_it; - bitset_t *nodes = bitset_malloc(get_irg_last_idx(irg)); - - ir_node *n, *m; - - fprintf(file, "graph G {\n\tgraph ["); - if (cb->graph_attr) - cb->graph_attr(file, self); - fprintf(file, "];\n"); - - if (cb->at_begin) - cb->at_begin(file, self); - - be_ifg_foreach_node(ifg, &nodes_it, n) { - if (cb->is_dump_node && cb->is_dump_node(self, n)) { - int idx = get_irn_idx(n); - bitset_set(nodes, idx); - fprintf(file, "\tnode ["); - if (cb->node_attr) - cb->node_attr(file, self, n); - fprintf(file, "]; n%d;\n", idx); - } - } - - /* Check, if all neighbours are indeed connected to the node. */ - be_ifg_foreach_node(ifg, &nodes_it, n) { - be_ifg_foreach_neighbour(ifg, &neigh_it, n, m) { - int n_idx = get_irn_idx(n); - int m_idx = get_irn_idx(m); - - if (n_idx < m_idx && bitset_is_set(nodes, n_idx) && bitset_is_set(nodes, m_idx)) { - fprintf(file, "\tn%d -- n%d [", n_idx, m_idx); - if (cb->edge_attr) - cb->edge_attr(file, self, n, m); - fprintf(file, "];\n"); - } - } - } - - if (cb->at_end) - cb->at_end(file, self); - - fprintf(file, "}\n"); - bitset_free(nodes); -} - static void int_comp_rec(be_ifg_t *ifg, ir_node *n, bitset_t *seen) { neighbours_iter_t neigh_it; ir_node *m; be_ifg_foreach_neighbour(ifg, &neigh_it, n, m) { - if (bitset_contains_irn(seen, m)) + if (bitset_is_set(seen, get_irn_idx(m))) continue; - if (arch_get_irn_register_req(m)->type & arch_register_req_type_ignore) + arch_register_req_t const *const req = arch_get_irn_register_req(m); + if (arch_register_req_is(req, ignore)) continue; - bitset_add_irn(seen, m); + bitset_set(seen, get_irn_idx(m)); int_comp_rec(ifg, m, seen); } @@ -390,19 +335,20 @@ static int int_component_stat(ir_graph *irg, be_ifg_t *ifg) { int n_comp = 0; nodes_iter_t nodes_it; - bitset_t *seen = bitset_irg_malloc(irg); + bitset_t *seen = bitset_malloc(get_irg_last_idx(irg)); ir_node *n; be_ifg_foreach_node(ifg, &nodes_it, n) { - if (bitset_contains_irn(seen, n)) + if (bitset_is_set(seen, get_irn_idx(n))) continue; - if (arch_get_irn_register_req(n)->type & arch_register_req_type_ignore) + arch_register_req_t const *const req = arch_get_irn_register_req(n); + if (arch_register_req_is(req, ignore)) continue; ++n_comp; - bitset_add_irn(seen, n); + bitset_set(seen, get_irn_idx(n)); int_comp_rec(ifg, n, seen); } @@ -414,7 +360,7 @@ void be_ifg_stat(ir_graph *irg, be_ifg_t *ifg, be_ifg_stat_t *stat) { nodes_iter_t nodes_it; neighbours_iter_t neigh_it; - bitset_t *nodes = bitset_irg_malloc(irg); + bitset_t *nodes = bitset_malloc(get_irg_last_idx(irg)); ir_node *n, *m; memset(stat, 0, sizeof(stat[0])); @@ -422,8 +368,8 @@ void be_ifg_stat(ir_graph *irg, be_ifg_t *ifg, be_ifg_stat_t *stat) be_ifg_foreach_node(ifg, &nodes_it, n) { stat->n_nodes += 1; be_ifg_foreach_neighbour(ifg, &neigh_it, n, m) { - bitset_add_irn(nodes, n); - stat->n_edges += !bitset_contains_irn(nodes, m); + bitset_set(nodes, get_irn_idx(n)); + stat->n_edges += !bitset_is_set(nodes, get_irn_idx(m)); } }