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(-)
>
>

Reply via email to