X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fcommon%2Firtools.c;h=dea407c535ab907f7d74070d16291b9bcae6565e;hb=afbbc0b1ccd684c4c24bfd43d0f994123245f39f;hp=d3e4c7fbdfb3de654f831d571ff45b56cfe2fac5;hpb=0a013e014042520bfce2d848dda34f7c8989eaf4;p=libfirm diff --git a/ir/common/irtools.c b/ir/common/irtools.c index d3e4c7fbd..dea407c53 100644 --- a/ir/common/irtools.c +++ b/ir/common/irtools.c @@ -75,10 +75,10 @@ copy_irn_to_irg(ir_node *n, ir_graph *irg) { else if (op == op_Proj) { old_irg = get_irn_irg(n); - if (n == get_irg_frame(old_irg)) + if (n == get_irg_initial_exec(old_irg)) + nn = get_irg_initial_exec(irg); + else if (n == get_irg_frame(old_irg)) nn = get_irg_frame(irg); - else if (n == get_irg_globals(old_irg)) - nn = get_irg_globals(irg); else if (n == get_irg_initial_mem(old_irg)) nn = get_irg_initial_mem(irg); else if (n == get_irg_args(old_irg)) @@ -107,8 +107,12 @@ copy_irn_to_irg(ir_node *n, ir_graph *irg) { set_irn_link(n, nn); /* fix the irg for blocks */ - if (is_Block(nn)) + if (is_Block(nn)) { nn->attr.block.irg = irg; + + /* we cannot allow blocks WITHOUT macroblock input */ + set_Block_MacroBlock(nn, get_Block_MacroBlock(n)); + } } /* @@ -120,7 +124,7 @@ ir_node *exact_copy(const ir_node *n) { ir_node *res, *block = NULL; if (is_no_Block(n)) - block = get_irn_n(n, -1); + block = get_nodes_block(n); res = new_ir_node(get_irn_dbg_info(n), irg, @@ -136,9 +140,16 @@ ir_node *exact_copy(const ir_node *n) { frees e.g. the memory of the graph_arr allocated in new_immBlock. */ copy_node_attr(n, res); new_backedge_info(res); + + if (is_Block(n)) { + set_Block_MacroBlock(res, get_Block_MacroBlock(n)); + } return res; } +/* + * Dump a pset containing Firm objects. + */ void firm_pset_dump(pset *set) { void *obj;