X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbessadestr.c;h=4ef0fae5e3148799d6b141888630b88703c961f1;hb=4ed245f5007168dab7850942a7ee6b6b29a19817;hp=4d73a0de5f58847167be3fce4b22006eb79a3f7a;hpb=48f893878b07f6e334389ff52abda5cc2adbf179;p=libfirm diff --git a/ir/be/bessadestr.c b/ir/be/bessadestr.c index 4d73a0de5..4ef0fae5e 100644 --- a/ir/be/bessadestr.c +++ b/ir/be/bessadestr.c @@ -35,7 +35,7 @@ DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;) #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) @@ -291,8 +291,8 @@ static void set_regs_or_place_dupls_walker(ir_node *bl, void *data) { 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 @@ -310,7 +310,9 @@ static void set_regs_or_place_dupls_walker(ir_node *bl, void *data) { 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 {