Another rewrite of prolog/epilog handling: Delay their creation until after register...
[libfirm] / ir / be / beinsn.c
index 167a2b2..4eee042 100644 (file)
@@ -158,7 +158,7 @@ be_insn_t *be_scan_insn(const be_insn_env_t *env, ir_node *irn)
        }
 
        insn->has_constraints = insn->in_constraints | insn->out_constraints;
-       insn->ops = obstack_finish(obst);
+       insn->ops = (be_operand_t*)obstack_finish(obst);
 
        /* Compute the admissible registers bitsets. */
        for (i = 0; i < insn->n_ops; ++i) {
@@ -175,28 +175,14 @@ be_insn_t *be_scan_insn(const be_insn_env_t *env, ir_node *irn)
 
                assert(cls == env->cls);
 
-               op->regs = bitset_obstack_alloc(obst, env->cls->n_regs);
-
                if (type & arch_register_req_type_limited) {
-                       rbitset_copy_to_bitset(req->limited, op->regs);
+                       bitset_t *regs = bitset_obstack_alloc(obst, env->cls->n_regs);
+                       rbitset_copy_to_bitset(req->limited, regs);
+                       op->regs = regs;
                } else {
-                       arch_put_non_ignore_regs(env->cls, op->regs);
-                       if (env->ignore_colors)
-                               bitset_andnot(op->regs, env->ignore_colors);
+                       op->regs = env->allocatable_regs;
                }
        }
 
        return insn;
 }
-
-be_insn_env_t *be_insn_env_init(be_insn_env_t *ie, const be_irg_t *birg,
-                                const arch_register_class_t *cls,
-                                struct obstack *obst)
-{
-       ie->cls  = cls;
-       ie->obst = obst;
-       ie->ignore_colors = bitset_obstack_alloc(obst, cls->n_regs);
-       be_abi_put_ignore_regs(birg->abi, cls, ie->ignore_colors);
-
-       return ie;
-}