X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbespillslots.c;h=6265111aa5a64a1f9b481d9aaf5cb74969c614b7;hb=6082146d47925a3dbbc78da30ca0a89276457dce;hp=f77933963720c1c8cd4630225599d000c85c3ef2;hpb=bb9f2e36362333c6635b89f5258171b06c786608;p=libfirm diff --git a/ir/be/bespillslots.c b/ir/be/bespillslots.c index f77933963..6265111aa 100644 --- a/ir/be/bespillslots.c +++ b/ir/be/bespillslots.c @@ -37,16 +37,16 @@ #include "unionfind.h" #include "irdump_t.h" -#include "benode_t.h" +#include "benode.h" #include "besched.h" +#include "bespill.h" #include "bespillslots.h" #include "bechordal_t.h" #include "bestatevent.h" -#include "bespilloptions.h" #include "bemodule.h" #include "beintlive_t.h" -#include "beirg_t.h" -#include "bearch_t.h" +#include "beirg.h" +#include "bearch.h" #define DBG_COALESCING 1 #define DBG_INTERFERENCES 2 @@ -182,7 +182,7 @@ static spill_t *collect_memphi(be_fec_env_t *env, ir_node *node, } /* add an affinity edge */ - affinty_edge = obstack_alloc(&env->obst, sizeof(affinty_edge[0])); + affinty_edge = OALLOC(&env->obst, affinity_edge_t); affinty_edge->affinity = get_block_execfreq(exec_freq, get_nodes_block(arg)); affinty_edge->slot1 = res->spillslot; affinty_edge->slot2 = arg_spill->spillslot; @@ -222,7 +222,7 @@ static int merge_interferences(be_fec_env_t *env, bitset_t** interferences, /* merge spillslots and interferences */ res = uf_union(spillslot_unionfind, s1, s2); /* we assume that we always merge s2 to s1 so swap s1, s2 if necessary */ - if(res != 0) { + if(res != s1) { int t = s1; s1 = s2; s2 = t; @@ -355,11 +355,11 @@ static void do_greedy_coalescing(be_fec_env_t *env) DB((dbg, DBG_COALESCING, "Coalescing %d spillslots\n", spillcount)); - interferences = alloca(spillcount * sizeof(interferences[0])); - spillslot_unionfind = alloca(spillcount * sizeof(spillslot_unionfind[0])); - spilllist = alloca(spillcount * sizeof(spilllist[0])); + interferences = ALLOCAN(bitset_t*, spillcount); + spillslot_unionfind = ALLOCAN(int, spillcount); + spilllist = ALLOCAN(spill_t*, spillcount); - uf_init(spillslot_unionfind, 0, spillcount); + uf_init(spillslot_unionfind, spillcount); DEBUG_ONLY( memset(spilllist, 0, spillcount * sizeof(spilllist[0])); @@ -569,7 +569,8 @@ static void assign_spill_entity(ir_node *node, ir_entity *entity) return; } - /* beware: we might have Stores with Memory Proj's, ia32 fisttp for instance */ + /* beware: we might have Stores with Memory Proj's, ia32 fisttp for + instance */ node = skip_Proj(node); assert(arch_get_frame_entity(node) == NULL); arch_set_frame_entity(node, entity); @@ -581,15 +582,10 @@ static void assign_spill_entity(ir_node *node, ir_entity *entity) */ static void assign_spillslots(be_fec_env_t *env) { - int i; - int spillcount; - spill_t *spill; - spill_slot_t* spillslots; - - spillcount = set_count(env->spills); - spillslots = alloca(spillcount * sizeof(spillslots[0])); - - memset(spillslots, 0, spillcount * sizeof(spillslots[0])); + int spillcount = set_count(env->spills); + spill_slot_t *spillslots = ALLOCANZ(spill_slot_t, spillcount); + spill_t *spill; + int i; /* construct spillslots */ for(spill = set_first(env->spills); spill != NULL; @@ -648,7 +644,7 @@ static void assign_spillslots(be_fec_env_t *env) memperm = get_memperm(env, predblock); - entry = obstack_alloc(&env->obst, sizeof(entry[0])); + entry = OALLOC(&env->obst, memperm_entry_t); entry->node = node; entry->pos = i; entry->in = argslot->entity; @@ -705,11 +701,11 @@ static void create_memperms(be_fec_env_t *env) memperm_t *memperm; for(memperm = set_first(env->memperms); memperm != NULL; memperm = set_next(env->memperms)) { - int i; - memperm_entry_t *entry; - ir_node *blockend; - ir_node** nodes = alloca(memperm->entrycount * sizeof(nodes[0])); - ir_node* mempermnode; + ir_node **nodes = ALLOCAN(ir_node*, memperm->entrycount); + memperm_entry_t *entry; + ir_node *blockend; + ir_node *mempermnode; + int i; assert(memperm->entrycount > 0); @@ -718,7 +714,7 @@ static void create_memperms(be_fec_env_t *env) nodes[i] = arg; } - mempermnode = be_new_MemPerm(arch_env, irg, memperm->block, + mempermnode = be_new_MemPerm(arch_env, memperm->block, memperm->entrycount, nodes); /* insert node into schedule */ @@ -824,7 +820,7 @@ static void collect_spills_walker(ir_node *node, void *data) return; mode = get_irn_mode(node); - cls = arch_get_irn_reg_class(node, -1); + cls = arch_get_irn_reg_class_out(node); align = arch_env_get_reg_class_alignment(env->arch_env, cls); be_node_needs_frame_entity(env, node, mode, align);