X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firscc.c;h=4ccbe9afb6986acdc9bf5de2291884a82218cb0a;hb=109a60bfcf239f2b5304c709a430658920c287cf;hp=e474878a9addc40dd92139dccf5cb7a68dc9f183;hpb=d9b6d0969fc324f197178583eee70bb58f0c845e;p=libfirm diff --git a/ir/ana/irscc.c b/ir/ana/irscc.c index e474878a9..4ccbe9afb 100644 --- a/ir/ana/irscc.c +++ b/ir/ana/irscc.c @@ -209,18 +209,13 @@ static INLINE void init_stack(void) { tos = 0; } -#if 0 /** * Frees the stack. */ -static INLINE void free_stack(void) { - if (stack != NULL) { - DEL_ARR_F(stack); - stack = NULL; - } - tos = 0; +static void finish_stack(void) { + DEL_ARR_F(stack); + stack = NULL; } -#endif /** * push a node onto the stack @@ -350,6 +345,11 @@ static INLINE void init_scc(ir_graph *irg, struct obstack *obst) { */ } +static INLINE void finish_scc(void) +{ + finish_stack(); +} + #ifdef INTERPROCEDURAL_VIEW static INLINE void init_ip_scc(struct obstack *obst) { init_scc_common(); @@ -393,11 +393,12 @@ static INLINE int get_start_index(ir_node *n) { not reachable. I.e., with this code, the order on the loop tree is correct. But a (single) test showed the loop tree is deeper. */ - if (get_irn_op(n) == op_Phi || - get_irn_op(n) == op_Block || - (get_irn_op(n) == op_Filter && get_interprocedural_view()) || - (get_irg_pinned(get_irn_irg(n)) == op_pin_state_floats && - get_irn_pinned(n) == op_pin_state_floats)) + if (get_irn_op(n) == op_Phi || + is_Block(n) || + (is_Filter(n) && get_interprocedural_view()) || ( + get_irg_pinned(get_irn_irg(n)) == op_pin_state_floats && + get_irn_pinned(n) == op_pin_state_floats + )) // Here we could test for backedge at -1 which is illegal return 0; else @@ -410,7 +411,7 @@ static INLINE int get_start_index(ir_node *n) { But it guarantees that Blocks are analysed before nodes contained in the block. If so, we can set the value to undef if the block is not \ executed. */ - if (is_cfop(n) || is_fragile_op(n) || get_irn_op(n) == op_Start) + if (is_cfop(n) || is_fragile_op(n) || is_Start(n)) return -1; else return 0; @@ -833,7 +834,7 @@ static void my_scc(ir_node *n) { ir_node *m; if (is_backedge(n, i)) continue; m = get_irn_n(n, i); /* get_irn_ip_pred(n, i); */ - /* if ((!m) || (get_irn_op(m) == op_Unknown)) continue; */ + /* if (!m || is_Unknown(m)) continue; */ my_scc(m); if (irn_is_in_stack(m)) { /* Uplink of m is smaller if n->m is a backedge. @@ -931,6 +932,8 @@ int construct_backedges(ir_graph *irg) { inc_irg_visited(irg); scc(get_irg_end(irg)); + + finish_scc(); obstack_free(&temp, NULL); assert(head_rem == current_loop);