From 55347641865ec720b29519a97d7e9c2ed0d2af03 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20W=C3=BCrdig?= Date: Thu, 10 Aug 2006 11:14:25 +0000 Subject: [PATCH] some bugifxes for alloca handling --- ir/be/beabi.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ir/be/beabi.c b/ir/be/beabi.c index 5dcb8dd6a..f48a54373 100644 --- a/ir/be/beabi.c +++ b/ir/be/beabi.c @@ -746,12 +746,15 @@ static ir_node *adjust_alloc(be_abi_irg_t *env, ir_node *alloc, ir_node *curr_sp env->call->flags.bits.try_omit_fp = 0; new_alloc = be_new_AddSP(env->isa->sp, irg, bl, curr_sp, get_Alloc_size(alloc)); - exchange(alloc_res, env->isa->stack_dir < 0 ? new_alloc : curr_sp); + exchange(alloc, env->isa->stack_dir < 0 ? new_alloc : curr_sp); if(alloc_mem != NULL) exchange(alloc_mem, new_r_NoMem(irg)); - curr_sp = new_alloc; + /* fix projnum of alloca res */ + set_Proj_proj(alloc_res, 1); + + curr_sp = alloc_res; } return curr_sp; @@ -829,12 +832,13 @@ static int cmp_call_dependecy(const void *c1, const void *c2) */ static void link_calls_in_block_walker(ir_node *irn, void *data) { - if(is_Call(irn)) { + if(is_Call(irn) || (get_irn_opcode(irn) == iro_Alloc && get_Alloc_where(irn) == stack_alloc)) { be_abi_irg_t *env = data; ir_node *bl = get_nodes_block(irn); void *save = get_irn_link(bl); - env->call->flags.bits.irg_is_leaf = 0; + if (is_Call(irn)) + env->call->flags.bits.irg_is_leaf = 0; set_irn_link(irn, save); set_irn_link(bl, irn); -- 2.20.1