+
+ if (is_pinned(arg)) {
+ /* Insert a duplicate of the original value in arguments block,
+ * make it the new phi arg,
+ * set its register,
+ * insert it into schedule,
+ * 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);
+ assert(get_irn_mode(phi) == get_irn_mode(dupl));
+ set_irn_n(phi, i, dupl);
+ set_reg(dupl, phi_reg);
+ sched_add_before(perm, dupl);
+ pin_irn(dupl, phi_block);
+ DBG((dbg, LEVEL_1, " arg is pinned: insert %+F(%s)\n", dupl, get_reg(dupl)->name));
+ } else {
+ /* No other phi has the same color (else arg would have been pinned),
+ * so just set the register and pin
+ */
+ set_reg(arg, phi_reg);
+ pin_irn(arg, phi_block);
+ DBG((dbg, LEVEL_1, " arg is not pinned: so pin %+F(%s)\n", arg, get_reg(arg)->name));
+ }