From 1f3408aabe9b052607d956e66e66dab700648ea4 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Sun, 28 Sep 2008 21:16:06 +0000 Subject: [PATCH] output register pressure in register class context [r22336] --- ir/be/bechordal_main.c | 4 ++++ ir/be/bemain.c | 5 ----- ir/be/bestat.c | 29 +++++------------------------ ir/be/bestat.h | 4 ++-- 4 files changed, 11 insertions(+), 31 deletions(-) diff --git a/ir/be/bechordal_main.c b/ir/be/bechordal_main.c index e4862665d..8af83be82 100644 --- a/ir/be/bechordal_main.c +++ b/ir/be/bechordal_main.c @@ -501,6 +501,10 @@ static void be_ra_chordal_main(be_irg_t *birg) stat_ev_ctx_push_str("bechordal_cls", cls->name); + stat_ev_if { + be_do_stat_reg_pressure(birg, cls); + } + memcpy(&pse.cenv, &chordal_env, sizeof(chordal_env)); pse.birg = birg; pre_spill(&pse, cls); diff --git a/ir/be/bemain.c b/ir/be/bemain.c index 0d9269a50..d49e7e8ff 100644 --- a/ir/be/bemain.c +++ b/ir/be/bemain.c @@ -757,11 +757,6 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) be_sched_vrfy(birg, be_options.vrfy_option); BE_TIMER_POP(t_verify); - /* do some statistics */ - stat_ev_if { - be_do_stat_reg_pressure(birg); - } - #ifdef FIRM_STATISTICS stat_ev_dbl("bemain_costs_before_ra", be_estimate_irg_costs(irg, arch_env, birg->exec_freq)); #endif diff --git a/ir/be/bestat.c b/ir/be/bestat.c index 74492023e..db3cd7e92 100644 --- a/ir/be/bestat.c +++ b/ir/be/bestat.c @@ -165,23 +165,10 @@ static void check_reg_pressure_class(pressure_walker_env_t *env, static void stat_reg_pressure_block(ir_node *block, void *data) { pressure_walker_env_t *env = data; - if(env->cls != NULL) { - check_reg_pressure_class(env, block, env->cls); - } else { - const arch_env_t *arch_env = be_get_birg_arch_env(env->birg); - int i, n; - - n = arch_env_get_n_reg_class(arch_env); - for (i = 0; i < n; i++) { - const arch_register_class_t *cls - = arch_env_get_reg_class(arch_env, i); - - check_reg_pressure_class(env, block, cls); - } - } + check_reg_pressure_class(env, block, env->cls); } -void be_do_stat_reg_pressure(be_irg_t *birg) { +void be_do_stat_reg_pressure(be_irg_t *birg, const arch_register_class_t *cls) { pressure_walker_env_t env; ir_graph *irg = be_get_birg_irg(birg); double average_pressure; @@ -192,20 +179,14 @@ void be_do_stat_reg_pressure(be_irg_t *birg) { env.regpressure = 0; be_liveness_assure_sets(be_assure_liveness(birg)); env.lv = be_get_birg_liveness(birg); - - // hack for now, TODO: remove me later -#if 0 - env.cls = NULL; -#else - env.cls = arch_env_get_reg_class(be_get_birg_arch_env(birg), 2); -#endif + env.cls = cls; /* Collect register pressure information for each block */ irg_block_walk_graph(irg, stat_reg_pressure_block, NULL, &env); average_pressure = env.regpressure / env.insn_count; - stat_ev_emit("bemain_average_register_pressure", average_pressure); - stat_ev_emit("bemain_maximum_register_pressure", env.max_pressure); + stat_ev_emit("bechordal_average_register_pressure", average_pressure); + stat_ev_emit("bechordal_maximum_register_pressure", env.max_pressure); } /** diff --git a/ir/be/bestat.h b/ir/be/bestat.h index f48567aa7..e4d2f470b 100644 --- a/ir/be/bestat.h +++ b/ir/be/bestat.h @@ -53,7 +53,7 @@ extern const char *be_stat_tags[STAT_TAG_LAST]; * Collects statistics information about register pressure. * @param birg The be irg object containing the irg */ -void be_do_stat_reg_pressure(be_irg_t *birg); +void be_do_stat_reg_pressure(be_irg_t *birg, const arch_register_class_t *cls); /** * Collect statistics about amount of ready nodes per block @@ -106,7 +106,7 @@ void be_close_stat_file(void); #define be_stat_init_irg(arch_env, irg) #define be_do_stat_nodes(irg, phase) -#define be_do_stat_reg_pressure(birg) +#define be_do_stat_reg_pressure(birg,cls) #define be_do_stat_sched_ready(block, ready_set) #define be_do_stat_perm(class_name, n_regs, perm, block, n, real_size) #define be_do_stat_permcycle(class_name, perm, block, is_chain, n_elems, n_ops) -- 2.20.1