-static INLINE if_edge_t *edge_init(if_edge_t *edge, int src, int tgt)
-{
- /* Bring the smaller entry to src. */
- if(src > tgt) {
- edge->src = tgt;
- edge->tgt = src;
- } else {
- edge->src = src;
- edge->tgt = tgt;
- }
-
- return edge;
-}
-
-static INLINE void add_if(const be_chordal_env_t *env, int src, int tgt)
-{
- if_edge_t edge;
- if_node_t node, *src_node, *tgt_node;
- /* insert edge */
- edge_init(&edge, src, tgt);
- set_insert(env->edges, &edge, sizeof(edge), IF_EDGE_HASH(&edge));
-
- /* insert nodes */
- node.nnr = src;
- node.neighb = pset_new_ptr(8);
- src_node = set_insert(env->nodes, &node, sizeof(node), IF_NODE_HASH(&node));
- node.nnr = tgt;
- node.neighb = pset_new_ptr(8);
- tgt_node = set_insert(env->nodes, &node, sizeof(node), IF_NODE_HASH(&node));
-
- /* insert neighbors into nodes */
- pset_insert_ptr(src_node->neighb, tgt_node);
- pset_insert_ptr(tgt_node->neighb, src_node);
-}
-
-static INLINE int are_connected(const be_chordal_env_t *env, int src, int tgt)
-{
- if_edge_t edge;
- edge_init(&edge, src, tgt);
- return set_find(env->edges, &edge, sizeof(edge), IF_EDGE_HASH(&edge)) != NULL;
-}
-
-int ifg_has_edge(const be_chordal_env_t *env, const if_node_t *n1, const if_node_t* n2) {
- return are_connected(env, n1->nnr, n2->nnr);
-}
-
-#ifdef DUMP_IFG
-
-static void dump_ifg(const be_chordal_env_t *env)
-{
- FILE *f;
- set *edges = env->edges;
- ir_graph *irg = env->irg;
- char filename[128];
-
- ir_snprintf(filename, sizeof(filename), "ifg_%s_%F.dot", env->cls->name, irg);
-
- if((f = fopen(filename, "wt")) != NULL) {
- bitset_pos_t pos;
- int n_edges = 0;
- if_edge_t *edge;
- bitset_t *bs = bitset_malloc(get_graph_node_count(irg));
-
- ir_fprintf(f, "graph \"%F\" {\n", irg);
- fprintf(f, "\tnode [shape=box,style=filled]\n");
-
- for(edge = set_first(edges); edge; edge = set_next(edges)) {
- bitset_set(bs, edge->src);
- bitset_set(bs, edge->tgt);
- n_edges++;
- }
-
- fprintf(f, "\tx [label=\"nodes: %u, edges: %d\"]\n", bitset_popcnt(bs), n_edges);
-
- bitset_foreach(bs, pos) {
- int nr = (int) pos;
- ir_node *irn = get_irn_for_graph_nr(irg, nr);
-
- ir_fprintf(f, "\tn%d [label=\"%+F\"]\n", nr, irn);
- }
-
- for(edge = set_first(edges); edge; edge = set_next(edges)) {
- fprintf(f, "\tn%d -- n%d [len=5]\n", edge->src, edge->tgt);
- }
-
- fprintf(f, "}\n");
- fclose(f);
-
- bitset_free(bs);
- }
-
-}
-
-#endif /* DUMP_IFG */
-
-#endif /* BUILD_GRAPH */
-