- Allow an arbitrary (for arbitrary < 32) number of in_rBAR and !in_rBAR constraints...
[libfirm] / ir / be / bessadestr.c
index 23f4d38..6137ce4 100644 (file)
@@ -143,6 +143,9 @@ static void insert_all_perms_walker(ir_node *bl, void *data) {
                        ir_node *arg     = get_irn_n(phi, i);
                        unsigned hash    = nodeset_hash(arg);
 
+                       if (arch_irn_is(chordal_env->birg->main_env->arch_env, arg, ignore))
+                               continue;
+
                        templ.arg  = arg;
                        pp         = set_find(arg_set, &templ, sizeof(templ), hash);
 
@@ -186,7 +189,6 @@ static void insert_all_perms_walker(ir_node *bl, void *data) {
                                pp->proj = proj;
                                assert(get_reg(pp->arg));
                                set_reg(proj, get_reg(pp->arg));
-                               sched_add_after(insert_after, proj);
                                insert_after = proj;
                                DBG((dbg, LEVEL_2, "Copy register assignment %s from %+F to %+F\n", get_reg(pp->arg)->name, pp->arg, pp->proj));
                        }
@@ -255,6 +257,9 @@ static void set_regs_or_place_dupls_walker(ir_node *bl, void *data) {
                        arg_block = get_Block_cfgpred_block(phi_block, i);
                        arg_reg   = get_reg(arg);
 
+                       if (arch_irn_is(chordal_env->birg->main_env->arch_env, arg, ignore))
+                               continue;
+
                        assert(arg_reg && "Register must be set while placing perms");
 
                        DBG((dbg, LEVEL_1, "  for %+F(%s) -- %+F(%s)\n", phi, phi_reg->name, arg, arg_reg->name));
@@ -384,7 +389,7 @@ void be_ssa_destruction(be_chordal_env_t *chordal_env) {
 
        FIRM_DBG_REGISTER(dbg, "ir.be.ssadestr");
 
-       be_liveness_assure_sets(lv);
+       be_liveness_invalidate(lv);
 
        /* create a map for fast lookup of perms: block --> perm */
        irg_walk_graph(irg, clear_link, collect_phis_walker, chordal_env);
@@ -428,6 +433,9 @@ static void ssa_destruction_check_walker(ir_node *bl, void *data) {
                for (i = 0, max = get_irn_arity(phi); i < max; ++i) {
                        ir_node *arg = get_irn_n(phi, i);
 
+                       if (arch_irn_is(chordal_env->birg->main_env->arch_env, arg, ignore))
+                               continue;
+
                        arg_reg = get_reg(arg);
 
                        if (phi_reg != arg_reg) {