X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeabi.c;h=e10097a1e6ff709a9f9f42e8ded586e5026bb251;hb=a8e4a954b36da58bce5413b569532ef54b87abcd;hp=7f4d1f813121755f05490bc0cb67520f1c3172e2;hpb=48ef3f1151bfb17ad3df3f05aedb794927605890;p=libfirm diff --git a/ir/be/beabi.c b/ir/be/beabi.c index 7f4d1f813..e10097a1e 100644 --- a/ir/be/beabi.c +++ b/ir/be/beabi.c @@ -45,6 +45,7 @@ #include "pdeq.h" #include "irtools.h" #include "raw_bitset.h" +#include "error.h" #include "be.h" #include "beabi.h" @@ -1127,6 +1128,7 @@ static void process_calls_in_block(ir_node *bl, void *data) curr_sp = adjust_free(env, irn, curr_sp); break; default: + panic("invalid call"); break; } } @@ -1134,9 +1136,12 @@ static void process_calls_in_block(ir_node *bl, void *data) obstack_free(&env->obst, nodes); /* Keep the last stack state in the block by tying it to Keep node */ - nodes[0] = curr_sp; - keep = be_new_Keep(env->isa->sp->reg_class, get_irn_irg(bl), bl, 1, nodes); - pmap_insert(env->keep_map, bl, keep); + if(curr_sp != env->init_sp) { + nodes[0] = curr_sp; + keep = be_new_Keep(env->isa->sp->reg_class, get_irn_irg(bl), + bl, 1, nodes); + pmap_insert(env->keep_map, bl, keep); + } } set_irn_link(bl, curr_sp); @@ -1467,11 +1472,9 @@ static ir_node *create_be_return(be_abi_irg_t *env, ir_node *irn, ir_node *bl, i */ stack = be_abi_reg_map_get(env->regs, isa->sp); if (keep) { - ir_node *bad = new_r_Bad(env->birg->irg); stack = get_irn_n(keep, 0); - set_nodes_block(keep, bad); - set_irn_n(keep, 0, bad); - // exchange(keep, new_r_Bad(env->birg->irg)); + be_kill_node(keep); + remove_End_keepalive(get_irg_end(env->birg->irg), keep); } /* Insert results for Return into the register map. */