On Tue, Apr 12, 2011 at 4:16 PM, Nathan Froyd <froy...@codesourcery.com> wrote: > It's a shame more passes don't make use of the statistics_* > infrastructure. This patch is a step towards rectifying that and adds > statistics_counter_event calls to passes mentioned in $SUBJECT. > postreload-gcse already tracked the stats for the dump file and so only > needs the statistics_counter_event calls; the other passes needed to be > taught about the statistics also. > > Tested on x86_64-unknown-linux-gnu. OK to commit?
Ok if there are no complaints within 24h. I actually have a local patch adding many of these which I use whenever fiddling with the pass pipeline ... (attached). Richard. > -Nathan > > * postreload-gcse.c (gcse_after_reload_main): Add calls to > statistics_counter_event. > * tree-ssa-copyrename.c (stats): Define. > (rename_ssa_copies): Count coalesced SSA_NAMEs. Add call to > statistics_counter_event. > * tree-ssa-math-opts.c (reciprocal_stats, sincos_stats): Define. > (bswap_stats, widen_mul_stats): Define. > (insert_reciprocals): Increment rdivs_inserted. > (execute_cse_reciprocals): Zeroize reciprocal_stats. Increment > rfuncs_inserted. Add calls to statistics_counter_event. > (execute_cse_sincos_1): Increment inserted. > (execute_cse_sincos): Zeroize sincos_stats. Add call to > statistics_counter_event. > (execute_optimize_bswap): Zeroize bswap_stats. Increment fields > of bswap_stats. Add calls to statistics_counter_event. > (convert_mult_to_widen): Increment widen_mults_inserted. > (convert_plusminus_to_widen): Increment maccs_inserted. > (convert_mult_to_fma): Increment fmas_inserted. > (execute_optimize_widening_mul): Zeroize widen_mul_stats. Add > calls to statistics_counter_event. > > diff --git a/gcc/postreload-gcse.c b/gcc/postreload-gcse.c > index 7eeecf4..8e26419 100644 > --- a/gcc/postreload-gcse.c > +++ b/gcc/postreload-gcse.c > @@ -1294,6 +1294,13 @@ gcse_after_reload_main (rtx f ATTRIBUTE_UNUSED) > fprintf (dump_file, "insns deleted: %d\n", stats.insns_deleted); > fprintf (dump_file, "\n\n"); > } > + > + statistics_counter_event (cfun, "copies inserted", > + stats.copies_inserted); > + statistics_counter_event (cfun, "moves inserted", > + stats.moves_inserted); > + statistics_counter_event (cfun, "insns deleted", > + stats.insns_deleted); > } > > /* We are finished with alias. */ > diff --git a/gcc/tree-ssa-copyrename.c b/gcc/tree-ssa-copyrename.c > index dfc0b4e..ae4fb5f 100644 > --- a/gcc/tree-ssa-copyrename.c > +++ b/gcc/tree-ssa-copyrename.c > @@ -40,6 +40,12 @@ along with GCC; see the file COPYING3. If not see > #include "tree-pass.h" > #include "langhooks.h" > > +static struct > +{ > + /* Number of copies coalesced. */ > + int coalesced; > +} stats; > + > /* The following routines implement the SSA copy renaming phase. > > This optimization looks for copies between 2 SSA_NAMES, either through a > @@ -360,9 +366,12 @@ rename_ssa_copies (void) > fprintf (debug, "\n"); > } > } > + stats.coalesced++; > replace_ssa_name_symbol (var, SSA_NAME_VAR (part_var)); > } > > + statistics_counter_event (cfun, "copies coalesced", > + stats.coalesced); > delete_var_map (map); > return updated ? TODO_remove_unused_locals : 0; > } > diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c > index 6e2213c..b9f631e 100644 > --- a/gcc/tree-ssa-math-opts.c > +++ b/gcc/tree-ssa-math-opts.c > @@ -138,6 +138,41 @@ struct occurrence { > bool bb_has_division; > }; > > +static struct > +{ > + /* Number of 1.0/X ops inserted. */ > + int rdivs_inserted; > + > + /* Number of 1.0/FUNC ops inserted. */ > + int rfuncs_inserted; > +} reciprocal_stats; > + > +static struct > +{ > + /* Number of cexpi calls inserted. */ > + int inserted; > +} sincos_stats; > + > +static struct > +{ > + /* Number of hand-written 32-bit bswaps found. */ > + int found_32bit; > + > + /* Number of hand-written 64-bit bswaps found. */ > + int found_64bit; > +} bswap_stats; > + > +static struct > +{ > + /* Number of widening multiplication ops inserted. */ > + int widen_mults_inserted; > + > + /* Number of integer multiply-and-accumulate ops inserted. */ > + int maccs_inserted; > + > + /* Number of fp fused multiply-add ops inserted. */ > + int fmas_inserted; > +} widen_mul_stats; > > /* The instance of "struct occurrence" representing the highest > interesting block in the dominator tree. */ > @@ -339,6 +374,8 @@ insert_reciprocals (gimple_stmt_iterator *def_gsi, struct > occurrence *occ, > gsi_insert_before (&gsi, new_stmt, GSI_SAME_STMT); > } > > + reciprocal_stats.rdivs_inserted++; > + > occ->recip_def_stmt = new_stmt; > } > > @@ -466,6 +503,7 @@ execute_cse_reciprocals (void) > sizeof (struct occurrence), > n_basic_blocks / 3 + 1); > > + memset (&reciprocal_stats, 0, sizeof (reciprocal_stats)); > calculate_dominance_info (CDI_DOMINATORS); > calculate_dominance_info (CDI_POST_DOMINATORS); > > @@ -568,6 +606,7 @@ execute_cse_reciprocals (void) > gimple_replace_lhs (stmt1, arg1); > gimple_call_set_fndecl (stmt1, fndecl); > update_stmt (stmt1); > + reciprocal_stats.rfuncs_inserted++; > > FOR_EACH_IMM_USE_STMT (stmt, ui, arg1) > { > @@ -580,6 +619,11 @@ execute_cse_reciprocals (void) > } > } > > + statistics_counter_event (cfun, "reciprocal divs inserted", > + reciprocal_stats.rdivs_inserted); > + statistics_counter_event (cfun, "reciprocal functions inserted", > + reciprocal_stats.rfuncs_inserted); > + > free_dominance_info (CDI_DOMINATORS); > free_dominance_info (CDI_POST_DOMINATORS); > free_alloc_pool (occ_pool); > @@ -711,6 +755,7 @@ execute_cse_sincos_1 (tree name) > gsi_insert_before (&gsi, stmt, GSI_SAME_STMT); > } > update_stmt (stmt); > + sincos_stats.inserted++; > > /* And adjust the recorded old call sites. */ > for (i = 0; VEC_iterate(gimple, stmts, i, use_stmt); ++i) > @@ -760,6 +805,7 @@ execute_cse_sincos (void) > bool cfg_changed = false; > > calculate_dominance_info (CDI_DOMINATORS); > + memset (&sincos_stats, 0, sizeof (sincos_stats)); > > FOR_EACH_BB (bb) > { > @@ -793,6 +839,9 @@ execute_cse_sincos (void) > } > } > > + statistics_counter_event (cfun, "sincos statements inserted", > + sincos_stats.inserted); > + > free_dominance_info (CDI_DOMINATORS); > return cfg_changed ? TODO_cleanup_cfg : 0; > } > @@ -1141,6 +1190,8 @@ execute_optimize_bswap (void) > bswap64_type = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (fndecl))); > } > > + memset (&bswap_stats, 0, sizeof (bswap_stats)); > + > FOR_EACH_BB (bb) > { > gimple_stmt_iterator gsi; > @@ -1189,6 +1240,10 @@ execute_optimize_bswap (void) > continue; > > changed = true; > + if (type_size == 32) > + bswap_stats.found_32bit++; > + else > + bswap_stats.found_64bit++; > > bswap_tmp = bswap_src; > > @@ -1237,6 +1292,11 @@ execute_optimize_bswap (void) > } > } > > + statistics_counter_event (cfun, "32-bit bswap implementations found", > + bswap_stats.found_32bit); > + statistics_counter_event (cfun, "64-bit bswap implementations found", > + bswap_stats.found_64bit); > + > return (changed ? TODO_dump_func | TODO_update_ssa | TODO_verify_ssa > | TODO_verify_stmts : 0); > } > @@ -1389,6 +1449,7 @@ convert_mult_to_widen (gimple stmt) > gimple_assign_set_rhs2 (stmt, fold_convert (type2, rhs2)); > gimple_assign_set_rhs_code (stmt, WIDEN_MULT_EXPR); > update_stmt (stmt); > + widen_mul_stats.widen_mults_inserted++; > return true; > } > > @@ -1491,6 +1552,7 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, > gimple stmt, > fold_convert (type2, mult_rhs2), > add_rhs); > update_stmt (gsi_stmt (*gsi)); > + widen_mul_stats.maccs_inserted++; > return true; > } > > @@ -1666,6 +1728,7 @@ convert_mult_to_fma (gimple mul_stmt, tree op1, tree > op2) > mulop1, op2, > addop); > gsi_replace (&gsi, fma_stmt, true); > + widen_mul_stats.fmas_inserted++; > } > > return true; > @@ -1681,6 +1744,8 @@ execute_optimize_widening_mul (void) > basic_block bb; > bool cfg_changed = false; > > + memset (&widen_mul_stats, 0, sizeof (widen_mul_stats)); > + > FOR_EACH_BB (bb) > { > gimple_stmt_iterator gsi; > @@ -1752,6 +1817,13 @@ execute_optimize_widening_mul (void) > } > } > > + statistics_counter_event (cfun, "widening multiplications inserted", > + widen_mul_stats.widen_mults_inserted); > + statistics_counter_event (cfun, "widening maccs inserted", > + widen_mul_stats.maccs_inserted); > + statistics_counter_event (cfun, "fused multiply-adds inserted", > + widen_mul_stats.fmas_inserted); > + > return cfg_changed ? TODO_cleanup_cfg : 0; > } > >
passes-reorder
Description: Binary data