- 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) {
- const arch_register_t *reg = rm[n].reg;
- int flags = 0;
- int pos = BE_OUT_POS(n);
- ir_node *proj;
-
- proj = new_r_Proj(irg, bl, irn, get_irn_mode(rm[n].irn), n);
- be_node_set_reg_class(irn, n, reg->reg_class);
- if (in_req)
- be_set_constr_single_reg(irn, n, reg);
- be_set_constr_single_reg(irn, pos, reg);
- be_node_set_reg_class(irn, pos, reg->reg_class);
- arch_set_irn_register(env->birg->main_env->arch_env, proj, reg);
-
- /* if the proj projects a ignore register or a node which is set to ignore, propagate this property. */
- if (arch_register_type_is(reg, ignore) || arch_irn_is(env->birg->main_env->arch_env, in[n], ignore))
- flags |= arch_irn_flags_ignore;
-
- if (arch_irn_is(env->birg->main_env->arch_env, in[n], modify_sp))
- flags |= arch_irn_flags_modify_sp;
-
- be_node_set_flags(irn, pos, flags);
-
- 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;