- if (*visited && pset_find_ptr(*visited, phi))
- return NULL;
-
- for (i = 0; i < n; ++i) {
- op = get_irn_n(phi, i);
- /* Matze: don't we unnecessary constraint our phis with this?
- * we only need to take the regclass IMO*/
- if (!is_Phi(op))
- return arch_get_register_req_out(op);
- }
-
- /*
- * The operands of that Phi were all Phis themselves.
- * We have to start a DFS for a non-Phi argument now.
- */
- if (!*visited)
- *visited = pset_new_ptr(16);
-
- pset_insert_ptr(*visited, phi);
-
- for (i = 0; i < n; ++i) {
- const arch_register_req_t *req;
- op = get_irn_n(phi, i);
- req = get_Phi_reg_req_recursive(op, visited);
- if (req != NULL)
- return req;
- }
-
- return NULL;
-}
-
-static const arch_register_req_t *phi_get_irn_reg_req(const ir_node *node,
- int pos)
-{
- backend_info_t *info = be_get_info(node);
- const arch_register_req_t *req = info->out_infos[0].req;
- (void) pos;
-
- if (req != NULL)
- return req;
-
- if (!mode_is_datab(get_irn_mode(node))) {
- req = arch_no_register_req;
- } else {
- pset *visited = NULL;
-
- req = get_Phi_reg_req_recursive(node, &visited);
- assert(req->cls != NULL);
- req = req->cls->class_req;
-
- if (visited != NULL)
- del_pset(visited);
- }
- info->out_infos[0].req = req;
- return req;
-}
-
-void be_set_phi_reg_req(ir_node *node, const arch_register_req_t *req)
-{