X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeifg.c;h=514caa772cdc8130cac330dbb6722e9158f22b21;hb=29087feac9466883c278e53eec325d5e3099df1d;hp=f9196129529b8771c7421553f820fc0307882208;hpb=ce6161a7e42a48f7422b7babcc64d8ace18e2687;p=libfirm diff --git a/ir/be/beifg.c b/ir/be/beifg.c index f91961295..514caa772 100644 --- a/ir/be/beifg.c +++ b/ir/be/beifg.c @@ -22,7 +22,6 @@ * @brief Interface for interference graphs. * @author Sebastian Hack * @date 18.11.2005 - * @version $Id$ */ #include "config.h" @@ -37,9 +36,7 @@ #include "irnode_t.h" #include "irprintf.h" #include "irtools.h" -#include "irbitset.h" #include "beifg.h" -#include "irphase_t.h" #include "error.h" #include "xmalloc.h" @@ -64,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) { @@ -128,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)) @@ -189,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) @@ -247,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; } @@ -321,68 +314,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_register_req_out(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); } @@ -392,19 +337,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_register_req_out(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); } @@ -416,7 +362,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])); @@ -424,8 +370,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)); } }