#define get_reg(irn) arch_get_irn_register(get_chordal_arch(chordal_env), irn)
#define set_reg(irn, reg) arch_set_irn_register(get_chordal_arch(chordal_env), irn, reg)
-#define is_Perm(irn) (arch_irn_classify(arch_env, irn) == arch_irn_class_perm)
+#define is_Perm(irn) (arch_irn_class_is(arch_env, irn, perm))
#define get_reg_cls(irn) (arch_get_irn_reg_class(arch_env, irn, -1))
#define is_curr_reg_class(irn) (get_reg_cls(p) == chordal_env->cls)
pin it
*/
ir_node *perm = get_Proj_pred(arg);
- ir_node *orig_val = get_irn_n(perm, get_Proj_proj(arg));
- ir_node *dupl = be_new_Copy(cls, chordal_env->irg, arg_block, orig_val);
+ ir_node *dupl = be_new_Copy(cls, chordal_env->irg, arg_block, arg);
+ ir_node *ins;
/* this is commented out because it will fail in case of unknown float */
#if 0
set_irn_n(phi, i, dupl);
set_reg(dupl, phi_reg);
- sched_add_before(perm, dupl);
+ /* skip the Perm's Projs and insert the copies behind. */
+ for(ins = sched_next(perm); is_Proj(ins); ins = sched_next(ins));
+ sched_add_before(ins, dupl);
pin_irn(dupl, phi_block);
DBG((dbg, LEVEL_1, " arg is pinned: insert %+F(%s)\n", dupl, get_reg(dupl)->name));
} else {