From 68655b9de256aa8d96434774b042cd30f352c5e7 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Tue, 6 May 2008 21:23:28 +0000 Subject: [PATCH] - add ir_graph to loop element, preventing the ugly casting [r19537] --- include/libfirm/irloop.h | 5 +++-- ir/ana/callgraph.c | 2 +- ir/ana/irloop.c | 9 ++++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/libfirm/irloop.h b/include/libfirm/irloop.h index 969ff77c6..f448d8384 100644 --- a/include/libfirm/irloop.h +++ b/include/libfirm/irloop.h @@ -67,8 +67,9 @@ void clear_backedges(ir_node *n); /** 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); diff --git a/ir/ana/callgraph.c b/ir/ana/callgraph.c index ffef4d059..e0a2431e1 100644 --- a/ir/ana/callgraph.c +++ b/ir/ana/callgraph.c @@ -567,7 +567,7 @@ static INLINE void pop_scc_to_loop(ir_graph *irg) { 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); diff --git a/ir/ana/irloop.c b/ir/ana/irloop.c index f1774a4fc..27243cf21 100644 --- a/ir/ana/irloop.c +++ b/ir/ana/irloop.c @@ -51,7 +51,14 @@ void add_loop_node(ir_loop *loop, ir_node *n) { 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++; } -- 2.20.1