ir_node *init_sp; /**< The node representing the stack pointer
at the start of the function. */
+ ir_node *start_barrier; /**< The barrier of the start block */
+
ir_node *reg_params; /**< The reg params node. */
pmap *regs; /**< A map of all callee-save and ignore regs to
their Projs to the RegParams node. */
nw = be_new_FrameAddr(env->isa->sp->reg_class, irg, bl, frame, ent);
exchange(irn, nw);
- if (ptr == param_base) {
+ /* check, if it's a param sel and if have not seen this entity immediatly before */
+ if (ptr == param_base && ctx->value_param_list != ent) {
set_entity_link(ent, ctx->value_param_list);
ctx->value_param_list = ent;
}
env->init_sp = be_new_IncSP(sp, irg, bl, env->init_sp, BE_STACK_FRAME_SIZE_EXPAND);
be_abi_reg_map_set(env->regs, sp, env->init_sp);
- barrier = create_barrier(env, bl, &mem, env->regs, 0);
+ env->start_barrier = barrier = create_barrier(env, bl, &mem, env->regs, 0);
env->init_sp = be_abi_reg_map_get(env->regs, sp);
arch_set_irn_register(env->birg->main_env->arch_env, env->init_sp, sp);
return pmap_get(abi->regs, (void *) reg);
}
+ir_node *be_abi_get_start_barrier(be_abi_irg_t *abi)
+{
+ return abi->start_barrier;
+}
+
/*
_____ _____ _ _ _ _ _ _
|_ _| __ \| \ | | | | | | | | |