X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbespillslots.c;h=30b997b337bac4b2d88761aa053add444053b7d5;hb=afbbc0b1ccd684c4c24bfd43d0f994123245f39f;hp=d6b3568c46bbc871ebb02a2996a8a20cdc3bc126;hpb=cf9c1673146d1f45d46ceb77eccfaf10fedff25d;p=libfirm diff --git a/ir/be/bespillslots.c b/ir/be/bespillslots.c index d6b3568c4..30b997b33 100644 --- a/ir/be/bespillslots.c +++ b/ir/be/bespillslots.c @@ -138,6 +138,7 @@ static spill_t *collect_spill(be_fec_env_t *env, ir_node *node, spill.mode = mode; spill.alignment = align; res = set_insert(env->spills, &spill, sizeof(spill), hash); + DB((dbg, DBG_COALESCING, "Slot %d: %+F\n", spill.spillslot, node)); } else { assert(res->mode == mode); assert(res->alignment == align); @@ -167,6 +168,7 @@ static spill_t *collect_memphi(be_fec_env_t *env, ir_node *node, spill.spillslot = set_count(env->spills); spill.mode = mode; spill.alignment = align; + DB((dbg, DBG_COALESCING, "Slot %d: %+F\n", spill.spillslot, node)); res = set_insert(env->spills, &spill, sizeof(spill), hash); /* collect attached spills and mem-phis */ @@ -354,7 +356,7 @@ static void do_greedy_coalescing(be_fec_env_t *env) if(spillcount == 0) return; - DBG((dbg, DBG_COALESCING, "Coalescing %d spillslots\n", spillcount)); + DB((dbg, DBG_COALESCING, "Coalescing %d spillslots\n", spillcount)); interferences = alloca(spillcount * sizeof(interferences[0])); spillslot_unionfind = alloca(spillcount * sizeof(spillslot_unionfind[0])); @@ -390,7 +392,7 @@ static void do_greedy_coalescing(be_fec_env_t *env) continue; if (my_values_interfere(env->birg, spill1, spill2)) { - DBG((dbg, DBG_INTERFERENCES, + DB((dbg, DBG_INTERFERENCES, "Slot %d and %d interfere\n", i, i2)); bitset_set(interferences[i], i2); @@ -418,7 +420,7 @@ static void do_greedy_coalescing(be_fec_env_t *env) continue; } - DBG((dbg, DBG_COALESCING, + DB((dbg, DBG_COALESCING, "Merging %d and %d because of affinity edge\n", s1, s2)); merge_interferences(env, interferences, spillslot_unionfind, s1, s2); @@ -444,7 +446,7 @@ static void do_greedy_coalescing(be_fec_env_t *env) continue; } - DBG((dbg, DBG_COALESCING, + DB((dbg, DBG_COALESCING, "Merging %d and %d because it is possible\n", s1, s2)); if(merge_interferences(env, interferences, spillslot_unionfind, s1, s2) != 0) { @@ -519,7 +521,10 @@ static ir_entity* create_stack_entity(be_fec_env_t *env, spill_slot_t *slot) { ir_graph *irg = be_get_birg_irg(env->birg); ir_type *frame = get_irg_frame_type(irg); - ir_entity *res = frame_alloc_area(frame, slot->size, slot->align, 0); + /* TODO: backend should be able to specify wether we want spill slots + * at begin or end of frame */ + int at_start = 1; + ir_entity *res = frame_alloc_area(frame, slot->size, slot->align, at_start); /* adjust size of the entity type... */ ir_type *enttype = get_entity_type(res); @@ -764,7 +769,7 @@ static int count_spillslots(const be_fec_env_t *env) be_fec_env_t *be_new_frame_entity_coalescer(be_irg_t *birg) { const arch_env_t *arch_env = birg->main_env->arch_env; - be_fec_env_t *env = xmalloc(sizeof(env[0])); + be_fec_env_t *env = XMALLOC(be_fec_env_t); be_liveness_assure_chk(be_assure_liveness(birg));