- arch_irn_set_register(node, pos, reg);
- set_req_single(obst, req, reg, additional_types);
-}
-
-void be_set_constr_limited(ir_node *node, int pos, const arch_register_req_t *req)
-{
- ir_graph *irg = get_irn_irg(node);
- struct obstack *obst = get_irg_obstack(irg);
- arch_register_req_t *r = get_be_req(node, pos);
-
- assert(arch_register_req_is(req, limited));
- assert(!(req->type & (arch_register_req_type_should_be_same | arch_register_req_type_must_be_different)));
- memcpy(r, req, sizeof(r[0]));
- r->limited = rbitset_duplicate_obstack_alloc(obst, req->limited, req->cls->n_regs);
-}
-
-void be_node_set_reg_class_in(ir_node *irn, int pos, const arch_register_class_t *cls)
-{
- arch_register_req_t *req = get_be_req(irn, pos);
-
- req->cls = cls;
-
- if (cls == NULL) {
- req->type = arch_register_req_type_none;
- } else if (req->type == arch_register_req_type_none) {
- req->type = arch_register_req_type_normal;
+ if (additional_types == 0) {
+ req = reg->single_req;
+ } else {
+ ir_graph *irg = get_irn_irg(node);
+ struct obstack *obst = be_get_birg_obst(irg);
+ req = get_single_req(obst, reg, additional_types);