X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Fircfscc.c;h=15230a9fe31677e1e016e8f3145ccf0833d6aa55;hb=4bc38ea2ba218ad082162de7ff3dfeadd5b66561;hp=8feda3aa3477a486f9a89a8c31e16e2b5ae8c91c;hpb=84eb51069f9b6daf39f78c37d56df2fb0d2397b0;p=libfirm diff --git a/ir/ana/ircfscc.c b/ir/ana/ircfscc.c index 8feda3aa3..15230a9fe 100644 --- a/ir/ana/ircfscc.c +++ b/ir/ana/ircfscc.c @@ -163,6 +163,12 @@ static INLINE void init_stack(void) { tos = 0; } +static void finish_stack(void) +{ + DEL_ARR_F(stack); + stack = NULL; +} + /** * Push a node n onto the IR-node stack. */ @@ -296,6 +302,11 @@ static INLINE void init_scc(ir_graph *irg, struct obstack *obst) { irg_walk_graph(irg, init_node, NULL, obst); } +static INLINE void finish_scc(void) +{ + finish_stack(); +} + #ifdef INTERPROCEDURAL_VIEW /** * Initializes the scc algorithm for the interprocedural case. @@ -335,6 +346,7 @@ static int is_outermost_StartBlock(ir_node *n) { static int is_head(ir_node *n, ir_node *root) { int i, arity; int some_outof_loop = 0, some_in_loop = 0; + (void) root; assert(is_Block(n)); @@ -370,6 +382,7 @@ static int is_head(ir_node *n, ir_node *root) { static int is_endless_head(ir_node *n, ir_node *root) { int i, arity; int none_outof_loop = 1, some_in_loop = 0; + (void) root; assert(is_Block(n)); /* Test for legal loop header: Block, Phi, ... */ @@ -655,6 +668,7 @@ int construct_cf_backedges(ir_graph *irg) { if (is_Block(el)) cfscc(el); } + finish_scc(); obstack_free(&temp, NULL); assert(head_rem == current_loop);