On 1/21/21 8:03 PM, Jan Hubicka wrote:
What exactly is suggested?
This one. Martin
>From 22bbf5342f2b73fad6c0286541bba6699c617380 Mon Sep 17 00:00:00 2001 From: Martin Liska <mli...@suse.cz> Date: Thu, 21 Jan 2021 09:02:31 +0100 Subject: [PATCH 1/2] Restore -fprofile-reproducibility flag. gcc/ChangeLog: PR gcov-profile/98739 * common.opt: Add missing equal symbol. * value-prof.c (get_nth_most_common_value): Fix comment and skip TOP N counter properly when -fprofile-reproducibility is not serial. --- gcc/common.opt | 2 +- gcc/value-prof.c | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index bde1711870d..a8a2b67a99d 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2248,7 +2248,7 @@ Enum(profile_reproducibility) String(parallel-runs) Value(PROFILE_REPRODUCIBILIT EnumValue Enum(profile_reproducibility) String(multithreaded) Value(PROFILE_REPRODUCIBILITY_MULTITHREADED) -fprofile-reproducible +fprofile-reproducible= Common Joined RejectNegative Var(flag_profile_reproducible) Enum(profile_reproducibility) Init(PROFILE_REPRODUCIBILITY_SERIAL) -fprofile-reproducible=[serial|parallel-runs|multithreaded] Control level of reproducibility of profile gathered by -fprofile-generate. diff --git a/gcc/value-prof.c b/gcc/value-prof.c index 4c916f4994f..fafe9d8d0f1 100644 --- a/gcc/value-prof.c +++ b/gcc/value-prof.c @@ -747,11 +747,8 @@ gimple_divmod_fixed_value (gassign *stmt, tree value, profile_probability prob, abs (counters[0]) is the number of executions for i in 0 ... TOPN-1 - counters[2 * i + 1] is target - abs (counters[2 * i + 2]) is corresponding hitrate counter. - - Value of counters[0] negative when counter became - full during merging and some values are lost. */ + counters[2 * i + 2] is target + counters[2 * i + 3] is corresponding hitrate counter. */ bool get_nth_most_common_value (gimple *stmt, const char *counter_type, @@ -765,15 +762,16 @@ get_nth_most_common_value (gimple *stmt, const char *counter_type, *count = 0; *value = 0; - gcov_type read_all = abs_hwi (hist->hvalue.counters[0]); + gcov_type read_all = hist->hvalue.counters[0]; + gcov_type covered = 0; + for (unsigned i = 0; i < counters; ++i) + covered += hist->hvalue.counters[2 * i + 3]; gcov_type v = hist->hvalue.counters[2 * n + 2]; gcov_type c = hist->hvalue.counters[2 * n + 3]; - if (hist->hvalue.counters[0] < 0 - && (flag_profile_reproducible == PROFILE_REPRODUCIBILITY_PARALLEL_RUNS - || (flag_profile_reproducible - == PROFILE_REPRODUCIBILITY_MULTITHREADED))) + if (read_all != covered + && flag_profile_reproducible != PROFILE_REPRODUCIBILITY_SERIAL) return false; /* Indirect calls can't be verified. */ -- 2.30.0