X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgmod.c;h=f9a4f481610f86510817e3306162bd48a4064a16;hb=7e8388fa7996ff182d3aa4e0cdd41b27bed4982f;hp=a354df255957f4ed8f228a2b035def2f85f1cc94;hpb=dada8d2eabdb60ae04d0d106f5e5bb49cb376631;p=libfirm diff --git a/ir/ir/irgmod.c b/ir/ir/irgmod.c index a354df255..f9a4f4816 100644 --- a/ir/ir/irgmod.c +++ b/ir/ir/irgmod.c @@ -96,8 +96,6 @@ void exchange(ir_node *old, ir_node *nw) { /* Else, do it the old-fashioned way. */ ir_node *block; - assert(get_irn_op(old)->opar != oparity_dynamic); - hook_turn_into_id(old); block = old->in[0]; @@ -109,6 +107,10 @@ void exchange(ir_node *old, ir_node *nw) { } } + if (get_irn_op(old)->opar == oparity_dynamic) { + DEL_ARR_F(get_irn_in(old)); + } + old->op = op_Id; old->in = NEW_ARR_D (ir_node *, irg->obst, 2); old->in[0] = block; @@ -125,7 +127,7 @@ void exchange(ir_node *old, ir_node *nw) { * all Proj nodes to there predecessors and all * partBlocks to there MacroBlock header. */ -static void collect(ir_node *n, void *env) { +static void collect_phiprojs_walker(ir_node *n, void *env) { ir_node *pred; (void) env; @@ -154,7 +156,7 @@ static void collect(ir_node *n, void *env) { /** * clear all links, including the Phi list of blocks and Phi nodes. */ -static void clear_links(ir_node *n, void *env) { +static void clear_node_and_phis_links(ir_node *n, void *env) { (void) env; set_irn_link(n, NULL); @@ -165,10 +167,9 @@ static void clear_links(ir_node *n, void *env) { } void collect_phiprojs(ir_graph *irg) { - irg_walk_graph(irg, clear_links, collect, NULL); + irg_walk_graph(irg, clear_node_and_phis_links, collect_phiprojs_walker, NULL); } - /*--------------------------------------------------------------------*/ /* Functionality for part_block */ /*--------------------------------------------------------------------*/