/** Loop elements: loop nodes and ir nodes */
typedef union {
firm_kind *kind; /**< is either k_ir_node or k_ir_loop */
- ir_node *node; /**< Pointer to an ir_node element */
- ir_loop *son; /**< Pointer to an ir_loop element */
+ ir_node *node; /**< Pointer to an ir_node element */
+ ir_loop *son; /**< Pointer to an ir_loop element */
+ ir_graph *irg; /**< Pointer to an ir_graph element (only callgraph loop trees) */
} loop_element;
int is_ir_loop(const void *thing);
m = pop();
loop_node_cnt++;
set_irg_dfn(m, loop_node_cnt);
- add_loop_node(current_loop, (ir_node *)m);
+ add_loop_irg(current_loop, m);
m->l = current_loop;
//m->callgraph_loop_depth = current_loop->depth;
} while(m != irg);
loop_element ln;
ln.node = n;
assert(loop && loop->kind == k_ir_loop);
- assert(get_kind(n) == k_ir_node || get_kind(n) == k_ir_graph); /* used in callgraph.c */
+ ARR_APP1(loop_element, loop->children, ln);
+ loop->n_nodes++;
+}
+
+void add_loop_irg(ir_loop *loop, ir_graph *irg) {
+ loop_element ln;
+ ln.irg = irg;
+ assert(loop && loop->kind == k_ir_loop);
ARR_APP1(loop_element, loop->children, ln);
loop->n_nodes++;
}