From: Matthias Braun Date: Mon, 11 Sep 2006 09:05:55 +0000 (+0000) Subject: spillslot coalescing statistics X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=8cca224c984a9db516219862b06abe370ce028c8;p=libfirm spillslot coalescing statistics --- diff --git a/ir/be/bespillslots.c b/ir/be/bespillslots.c index 0c50fb070..b854d611f 100644 --- a/ir/be/bespillslots.c +++ b/ir/be/bespillslots.c @@ -189,8 +189,7 @@ static void collect_spills_walker(ir_node *node, void *data) { ss_env_t *env = data; const arch_env_t *arch_env = env->arch_env; - // @@@ ia32 classify returns classification of the irn the proj is attached - // too, why oh why?... + // classify returns classification of the irn the proj is attached to if(is_Proj(node)) return; @@ -743,6 +742,25 @@ static void create_memperms(ss_env_t *env) { } } +static int count_spillslots(const ss_env_t *env) { + const spill_t *spill; + int spillcount = set_count(env->spills); + bitset_t *counted = bitset_alloca(spillcount); + int slotcount; + + slotcount = 0; + for(spill = set_first(env->spills); spill != NULL; + spill = set_next(env->spills)) { + int spillslot = spill->spillslot; + if(!bitset_is_set(counted, spillslot)) { + slotcount++; + bitset_set(counted, spillslot); + } + } + + return slotcount; +} + void be_coalesce_spillslots(const be_chordal_env_t *chordal_env, int coalesce_spillslots) { ss_env_t env; @@ -759,8 +777,14 @@ void be_coalesce_spillslots(const be_chordal_env_t *chordal_env, int coalesce_sp /* Get initial spill slots */ irg_walk_graph(chordal_env->irg, NULL, collect_spills_walker, &env); - if(coalesce_spillslots) + be_stat_ev("spillslots", set_count(env.spills)); + + if(coalesce_spillslots) { do_greedy_coalescing(&env); + if(be_stat_ev_is_active()) { + be_stat_ev("spillslots_after_coalescing", count_spillslots(&env)); + } + } assign_spillslots(&env);