- return res;
-}
-
-/**
- * Creates a barrier.
- */
-static ir_node *create_barrier(be_abi_irg_t *env, ir_node *bl, ir_node **mem, pmap *regs, int in_req)
-{
- ir_graph *irg = env->birg->irg;
- int n_regs = pmap_count(regs);
- int n;
- ir_node *irn;
- ir_node **in;
- reg_node_map_t *rm;
-
- rm = reg_map_to_arr(&env->obst, regs);
-
- for (n = 0; n < n_regs; ++n)
- obstack_ptr_grow(&env->obst, rm[n].irn);
-
- if (mem) {
- obstack_ptr_grow(&env->obst, *mem);
- n++;
- }
-
- in = (ir_node **) obstack_finish(&env->obst);
- irn = be_new_Barrier(irg, bl, n, in);
- obstack_free(&env->obst, in);
-
- for (n = 0; n < n_regs; ++n) {
- ir_node *pred = rm[n].irn;
- const arch_register_t *reg = rm[n].reg;
- arch_register_type_t add_type = 0;
- ir_node *proj;
-
- /* stupid workaround for now... as not all nodes report register
- * requirements. */
- if (!is_Phi(pred)) {
- const arch_register_req_t *ireq = arch_get_register_req_out(pred);
- if (ireq->type & arch_register_req_type_ignore)
- add_type |= arch_register_req_type_ignore;
- if (ireq->type & arch_register_req_type_produces_sp)
- add_type |= arch_register_req_type_produces_sp;
- }
-
- proj = new_r_Proj(irg, bl, irn, get_irn_mode(pred), n);
- be_node_set_reg_class_in(irn, n, reg->reg_class);
- if (in_req)
- be_set_constr_single_reg_in(irn, n, reg, 0);
- be_set_constr_single_reg_out(irn, n, reg, add_type);
- arch_set_irn_register(proj, reg);
-
- pmap_insert(regs, (void *) reg, proj);
- }
-
- if (mem) {
- *mem = new_r_Proj(irg, bl, irn, mode_M, n);
- }
-
- obstack_free(&env->obst, rm);
- return irn;