ir_node *cpy = be_new_Copy(bel->cls, irg, pred_block, arg);
pset_insert_ptr(bel->copies, cpy);
DBG((dbg, DBG_START, " place a %+F of %+F in %+F\n", cpy, arg, pred_block));
+ /* TODO: Place copies before jumps! */
sched_add_before(sched_last(pred_block), cpy);
set_irn_n(irn, o, cpy);
}
foreach_pset(bel->copies, irn) {
ir_node *src;
- const ir_edge_t *edge;
+ const ir_edge_t *edge, *ne;
assert(be_is_Copy(irn));
src = be_get_Copy_op(irn);
- foreach_out_edge(irn, edge) {
- ir_node* user = get_edge_src_irn(edge);
+ foreach_out_edge_safe(irn, edge, ne) {
+ ir_node *user = get_edge_src_irn(edge);
int user_pos = get_edge_src_pos(edge);
- // is this normal?
- if(user == NULL)
- break;
set_irn_n(user, user_pos, src);
}
}