X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeutil.c;h=a25aa9ccc9b4332f471b162c784068bbbcb4b2df;hb=321ae93c651a24f17e2b7540e67a959db803c40d;hp=a50cb9dce306c583c690926e2d68070a0a19f7b1;hpb=30080af12b11add6144c4da009956ddcb855934f;p=libfirm diff --git a/ir/be/beutil.c b/ir/be/beutil.c index a50cb9dce..a25aa9ccc 100644 --- a/ir/be/beutil.c +++ b/ir/be/beutil.c @@ -72,12 +72,19 @@ static void localize_const_walker(ir_node *irn, void *data) for(i = 0, n = get_irn_arity(irn); i < n; ++i) { ir_node *op = get_irn_n(irn, i); if(get_irn_opcode(op) == iro_Const) { + ir_node *tgt_block, *cnst; + + /* Special treatment for phi nodes, because phi-usage is different */ + tgt_block = get_nodes_block(irn); + if(is_Phi(irn)) + tgt_block = get_nodes_block(get_irn_n(tgt_block, i)); + /* * We have to create the const node by ourselves, since the * firmcons implementation always places it in the start block. */ - ir_node *cnst = new_ir_node(NULL, get_irn_irg(irn), - get_nodes_block(irn), op_Const, get_irn_mode(op), 0, NULL); + cnst = new_ir_node(NULL, get_irn_irg(irn), + tgt_block, op_Const, get_irn_mode(op), 0, NULL); cnst->attr.con.tv = get_Const_tarval(op); set_irn_n(irn, i, cnst); }