On Thu, Sep 20, 2018 at 2:11 AM Martin Liška <mli...@suse.cz> wrote: > > Hello. > > I've been working for some time on a patch that simplifies how we set > the hotness threshold of basic blocks. Currently, we calculate so called > arc profile histograms that should identify edges that cover 99.9% of all > branching. These edges are then identified as hot. Disadvantage of the > approach > is that it comes with significant overhead in run-time and GCC related code > is also not trivial. Moreover, anytime a histogram is merged after an > instrumented > run, the resulting histogram is misleading. > > That said, I decided to simplify it again, remove usage of the histogram and > return > to what we have before (--param hot-bb-count-fraction). That basically says > that > we consider hot each edge that has execution count bigger than sum_max / > 10.000. > > Note that LTO+PGO remains untouched as it still uses histogram that is > dynamically > calculated by read arc counts. Hi, Does this affect AutoFDO stuff? AutoFDO is broken and I am fixing it now, on the basis of current code.
Thanks, bin > > Note the statistics of the patch: > 19 files changed, 101 insertions(+), 1216 deletions(-) > > I'm attaching file sizes of SPEC2006 int benchmark. > > Patch survives testing on x86_64-linux-gnu machine. > Ready to be installed? > > Martin > > gcc/ChangeLog: > > 2018-09-19 Martin Liska <mli...@suse.cz> > > * auto-profile.c (autofdo_source_profile::read): Do not > set sum_all. > (read_profile): Do not add working sets. > (read_autofdo_file): Remove sum_all. > (afdo_callsite_hot_enough_for_early_inline): Remove const > qualifier. > * coverage.c (struct counts_entry): Remove gcov_summary. > (read_counts_file): Read new GCOV_TAG_OBJECT_SUMMARY, > do not support GCOV_TAG_PROGRAM_SUMMARY. > (get_coverage_counts): Remove summary and expected > arguments. > * coverage.h (get_coverage_counts): Likewise. > * doc/gcov-dump.texi: Remove -w option. > * gcov-dump.c (dump_working_sets): Remove. > (main): Do not support '-w' option. > (print_usage): Likewise. > (tag_summary): Likewise. > * gcov-io.c (gcov_write_summary): Do not dump > histogram. > (gcov_read_summary): Likewise. > (gcov_histo_index): Remove. > (gcov_histogram_merge): Likewise. > (compute_working_sets): Likewise. > * gcov-io.h (GCOV_TAG_OBJECT_SUMMARY): Mark > it not obsolete. > (GCOV_TAG_PROGRAM_SUMMARY): Mark it obsolete. > (GCOV_TAG_SUMMARY_LENGTH): Adjust. > (GCOV_HISTOGRAM_SIZE): Remove. > (GCOV_HISTOGRAM_BITVECTOR_SIZE): Likewise. > (struct gcov_summary): Simplify rapidly just > to runs and sum_max fields. > (gcov_histo_index): Remove. > (NUM_GCOV_WORKING_SETS): Likewise. > (compute_working_sets): Likewise. > * gcov-tool.c (print_overlap_usage_message): Remove > trailing empty line. > * gcov.c (read_count_file): Read GCOV_TAG_OBJECT_SUMMARY. > (output_lines): Remove program related line. > * ipa-profile.c (ipa_profile): Do not consider GCOV histogram. > * lto-cgraph.c (output_profile_summary): Do not stream GCOV > histogram. > (input_profile_summary): Do not read it. > (merge_profile_summaries): And do not merge it. > (input_symtab): Do not call removed function. > * modulo-sched.c (sms_schedule): Do not print sum_max. > * params.def (HOT_BB_COUNT_FRACTION): Reincarnate param that was > removed when histogram method was invented. > (HOT_BB_COUNT_WS_PERMILLE): Mention that it's used only in LTO > mode. > * postreload-gcse.c (eliminate_partially_redundant_load): Fix > GCOV coding style. > * predict.c (get_hot_bb_threshold): Use HOT_BB_COUNT_FRACTION > and dump selected value. > * profile.c (add_working_set): Remove. > (get_working_sets): Likewise. > (find_working_set): Likewise. > (get_exec_counts): Do not work with working sets. > (read_profile_edge_counts): Do not inform as sum_max is removed. > (compute_branch_probabilities): Likewise. > (compute_value_histograms): Remove argument for call of > get_coverage_counts. > * profile.h: Do not make gcov_summary const. > > libgcc/ChangeLog: > > 2018-09-19 Martin Liska <mli...@suse.cz> > > * libgcov-driver.c (crc32_unsigned): Remove. > (gcov_histogram_insert): Likewise. > (gcov_compute_histogram): Likewise. > (compute_summary): Simplify rapidly. > (merge_one_data): Do not handle PROGRAM_SUMMARY tag. > (merge_summary): Rapidly simplify. > (dump_one_gcov): Ignore gcov_summary. > (gcov_do_dump): Do not handle program summary, it's not > used. > * libgcov-util.c (tag_summary): Remove. > (read_gcda_finalize): Fix coding style. > (read_gcda_file): Initialize curr_object_summary. > (compute_summary): Remove. > (calculate_overlap): Remove settings of run_max. > --- > gcc/auto-profile.c | 21 +-- > gcc/coverage.c | 59 +----- > gcc/coverage.h | 4 +- > gcc/doc/gcov-dump.texi | 6 +- > gcc/gcov-dump.c | 81 +------- > gcc/gcov-io.c | 398 +--------------------------------------- > gcc/gcov-io.h | 71 +------ > gcc/gcov-tool.c | 1 - > gcc/gcov.c | 7 +- > gcc/ipa-profile.c | 26 +-- > gcc/lto-cgraph.c | 136 +------------- > gcc/modulo-sched.c | 8 - > gcc/params.def | 7 +- > gcc/postreload-gcse.c | 2 +- > gcc/predict.c | 9 +- > gcc/profile.c | 116 +----------- > gcc/profile.h | 2 +- > libgcc/libgcov-driver.c | 324 ++++---------------------------- > libgcc/libgcov-util.c | 39 +--- > 19 files changed, 101 insertions(+), 1216 deletions(-) > >