- insn->out_constraints |= o.has_constraints;
- pre_colored += arch_get_irn_register(arch_env, irn) != NULL;
- }
-
- insn->pre_colored = pre_colored == insn->n_ops && insn->n_ops > 0;
- insn->use_start = insn->n_ops;
-
- for(i = 0, n = get_irn_arity(irn); i < n; ++i) {
- ir_node *op = get_irn_n(irn, i);
-
- if(arch_irn_consider_in_reg_alloc(arch_env, env->cls, op)) {
- arch_get_register_req(arch_env, &o.req, irn, i);
- o.carrier = op;
- o.irn = irn;
- o.pos = i;
- o.partner = NULL;
- o.has_constraints = arch_register_req_is(&o.req, limited);
- obstack_grow(obst, &o, sizeof(o));
- insn->n_ops++;
- insn->in_constraints |= o.has_constraints;
- }
- }
-
- insn->has_constraints = insn->in_constraints | insn->out_constraints;
- insn->ops = obstack_finish(obst);
-
- /* Compute the admissible registers bitsets. */
- for (i = 0; i < insn->n_ops; ++i) {
- be_operand_t *op = &insn->ops[i];
-
- if (op->req.cls == NULL && op->req.type == arch_register_req_type_none) {
- op->req.cls = env->cls;
- op->req.type = arch_register_req_type_normal;
+ );
+
+ insn->use_start = insn->n_ops;
+
+ /* now collect the uses for this node */
+ be_foreach_use(irn, cls, in_req, op, op_req,
+ /* found a register use, create an operand */
+ if (arch_register_req_is(in_req, limited)) {
+ o.regs = in_req->limited;
+ has_constraints = true;
+ } else {
+ o.regs = env->allocatable_regs->data;