projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Comments, beautify
[libfirm]
/
ir
/
be
/
beutil.c
diff --git
a/ir/be/beutil.c
b/ir/be/beutil.c
index
a50cb9d
..
a25aa9c
100644
(file)
--- 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) {
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.
*/
/*
* 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);
}
cnst->attr.con.tv = get_Const_tarval(op);
set_irn_n(irn, i, cnst);
}