X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firgmod.c;h=f9a4f481610f86510817e3306162bd48a4064a16;hb=7e8388fa7996ff182d3aa4e0cdd41b27bed4982f;hp=dfd05b851812541db9489206349bdcbed406e92f;hpb=2cf7d1422759775a6efa83ffe02302f427e37149;p=libfirm diff --git a/ir/ir/irgmod.c b/ir/ir/irgmod.c index dfd05b851..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 */ /*--------------------------------------------------------------------*/ @@ -223,10 +224,10 @@ void part_block(ir_node *node) { if (mbh != old_block) { /* we splitting a partBlock */ - set_irn_n(new_block, -1, mbh); + set_Block_MacroBlock(new_block, mbh); } else { /* we are splitting a header: this creates a new header */ - set_irn_n(new_block, -1, new_block); + set_Block_MacroBlock(new_block, new_block); } set_irg_current_block(current_ir_graph, new_block); { @@ -266,7 +267,7 @@ void part_block(ir_node *node) { if (curr == old_block) { /* old_block dominates the block, so old_block will be the new macro block header */ - set_irn_n(block, -1, old_block); + set_Block_MacroBlock(block, old_block); set_irn_link(block, get_irn_link(old_block)); set_irn_link(old_block, block); break;