* @brief Interface for interference graphs.
* @author Sebastian Hack
* @date 18.11.2005
- * @version $Id$
*/
#include "config.h"
#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"
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)
/* 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;
}
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)
+ if (arch_get_irn_register_req(m)->type & arch_register_req_type_ignore)
continue;
- bitset_add_irn(seen, m);
+ bitset_set(seen, get_irn_idx(m));
int_comp_rec(ifg, m, seen);
}
{
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)
+ if (arch_get_irn_register_req(n)->type & arch_register_req_type_ignore)
continue;
++n_comp;
- bitset_add_irn(seen, n);
+ bitset_set(seen, get_irn_idx(n));
int_comp_rec(ifg, n, seen);
}
{
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]));
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));
}
}