be_set_frame_entity(node, slot->entity);
} else {
int i, arity;
+ ir_node *block = get_nodes_block(node);
// should be a PhiM
assert(is_Phi(node));
for(i = 0, arity = get_irn_arity(node); i < arity; ++i) {
ir_node *arg = get_irn_n(node, i);
+ ir_node *predblock = get_Block_cfgpred_block(block, i);
spill_t *argspill;
int argslotid;
create_stack_entity(env, argslot);
}
- memperm = get_memperm(env, get_nodes_block(arg));
+ memperm = get_memperm(env, predblock);
entry = obstack_alloc(&env->obst, sizeof(entry[0]));
entry->node = node;
// insert node into schedule
blockend = get_end_of_block_insertion_point(memperm->block);
- sched_add_after(blockend, mempermnode);
+ sched_add_before(blockend, mempermnode);
for(entry = memperm->entries, i = 0; entry != NULL; entry = entry->next, ++i) {
ir_node *proj;
be_set_MemPerm_out_entity(mempermnode, i, entry->out);
set_irg_current_block(env->chordal_env->irg, memperm->block);
proj = new_Proj(mempermnode, get_irn_mode(arg), i);
- sched_add_after(blockend, proj);
+ sched_add_before(blockend, proj);
set_irn_n(entry->node, entry->pos, proj);
}