On Wed, Jan 20, 2021 at 12:04 PM Martin Liška <mli...@suse.cz> wrote: > > Hello. > > For GCC 11 I've made a change in a way how we track TOP N counters: > - dynamic allocation is used for key value pairs > - up to 32 values are tracked in parallel > - the counters are allocated dynamically and don't occupy so much space > in BSS executable > > Having that we can track more values and the risk of not reproducibility is > smaller. > Apart from that, there's apparently no user (except Honza's Firefox > experiments) > of the option as showed in the PR (the option changing does not work). > > That said, I tend to remove the option. > Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
The option was present on the GCC 10 branch as well so I fear we can't simply remove it. So can you leave it as the usual Ignore entry in common.opt? Otherwise OK, but I guess the issue can still pop up so I'm not sure whether this is the correct thing to do. Did the option implementation not work? Richard. > Thanks, > Martin > > gcc/ChangeLog: > > PR gcov-profile/98739 > * common.opt: Drop -fprofile-reproducibility flag. > * coretypes.h (enum profile_reproducibility): Drop the enum. > * doc/invoke.texi: Remove documentation. > * value-prof.c (get_nth_most_common_value): Drop usage of > flag_profile_reproducible. > --- > gcc/common.opt | 16 ---------------- > gcc/coretypes.h | 7 ------- > gcc/doc/invoke.texi | 30 ------------------------------ > gcc/value-prof.c | 6 ------ > 4 files changed, 59 deletions(-) > > diff --git a/gcc/common.opt b/gcc/common.opt > index bde1711870d..89dc3129074 100644 > --- a/gcc/common.opt > +++ b/gcc/common.opt > @@ -2236,22 +2236,6 @@ fprofile-exclude-files= > Common Joined RejectNegative Var(flag_profile_exclude_files) > Instrument only functions from files whose name does not match any of the > regular expressions (separated by semi-colons). > > -Enum > -Name(profile_reproducibility) Type(enum profile_reproducibility) > UnknownError(unknown profile reproducibility method %qs) > - > -EnumValue > -Enum(profile_reproducibility) String(serial) > Value(PROFILE_REPRODUCIBILITY_SERIAL) > - > -EnumValue > -Enum(profile_reproducibility) String(parallel-runs) > Value(PROFILE_REPRODUCIBILITY_PARALLEL_RUNS) > - > -EnumValue > -Enum(profile_reproducibility) String(multithreaded) > Value(PROFILE_REPRODUCIBILITY_MULTITHREADED) > - > -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. > - > Enum > Name(profile_update) Type(enum profile_update) UnknownError(unknown profile > update method %qs) > > diff --git a/gcc/coretypes.h b/gcc/coretypes.h > index 406572e947d..3a67061a483 100644 > --- a/gcc/coretypes.h > +++ b/gcc/coretypes.h > @@ -212,13 +212,6 @@ enum profile_update { > PROFILE_UPDATE_PREFER_ATOMIC > }; > > -/* Type of profile reproducibility methods. */ > -enum profile_reproducibility { > - PROFILE_REPRODUCIBILITY_SERIAL, > - PROFILE_REPRODUCIBILITY_PARALLEL_RUNS, > - PROFILE_REPRODUCIBILITY_MULTITHREADED > -}; > - > /* Type of -fstack-protector-*. */ > enum stack_protector { > SPCT_FLAG_DEFAULT = 1, > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index 5f4a06625eb..c66ba2a62ad 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -582,7 +582,6 @@ Objective-C and Objective-C++ Dialects}. > -fprofile-note=@var{path} -fprofile-prefix-path=@var{path} @gol > -fprofile-update=@var{method} -fprofile-filter-files=@var{regex} @gol > -fprofile-exclude-files=@var{regex} @gol > --fprofile-reproducible=@r{[}multithreaded@r{|}parallel-runs@r{|}serial@r{]} > @gol > -fsanitize=@var{style} -fsanitize-recover -fsanitize-recover=@var{style} > @gol > -fasan-shadow-offset=@var{number} > -fsanitize-sections=@var{s1},@var{s2},... @gol > -fsanitize-undefined-trap-on-error -fbounds-check @gol > @@ -14640,35 +14639,6 @@ any of the regular expressions (separated by > semi-colons). > For example, @option{-fprofile-exclude-files=/usr/.*} will prevent > instrumentation > of all files that are located in the @file{/usr/} folder. > > -@item > -fprofile-reproducible=@r{[}multithreaded@r{|}parallel-runs@r{|}serial@r{]} > -@opindex fprofile-reproducible > -Control level of reproducibility of profile gathered by > -@code{-fprofile-generate}. This makes it possible to rebuild program > -with same outcome which is useful, for example, for distribution > -packages. > - > -With @option{-fprofile-reproducible=serial} the profile gathered by > -@option{-fprofile-generate} is reproducible provided the trained program > -behaves the same at each invocation of the train run, it is not > -multi-threaded and profile data streaming is always done in the same > -order. Note that profile streaming happens at the end of program run but > -also before @code{fork} function is invoked. > - > -Note that it is quite common that execution counts of some part of > -programs depends, for example, on length of temporary file names or > -memory space randomization (that may affect hash-table collision rate). > -Such non-reproducible part of programs may be annotated by > -@code{no_instrument_function} function attribute. @command{gcov-dump} with > -@option{-l} can be used to dump gathered data and verify that they are > -indeed reproducible. > - > -With @option{-fprofile-reproducible=parallel-runs} collected profile > -stays reproducible regardless the order of streaming of the data into > -gcda files. This setting makes it possible to run multiple instances of > -instrumented program in parallel (such as with @code{make -j}). This > -reduces quality of gathered data, in particular of indirect call > -profiling. > - > @item -fsanitize=address > @opindex fsanitize=address > Enable AddressSanitizer, a fast memory error detector. > diff --git a/gcc/value-prof.c b/gcc/value-prof.c > index 4c916f4994f..5c6d2048aff 100644 > --- a/gcc/value-prof.c > +++ b/gcc/value-prof.c > @@ -770,12 +770,6 @@ get_nth_most_common_value (gimple *stmt, const char > *counter_type, > 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))) > - return false; > - > /* Indirect calls can't be verified. */ > if (stmt > && check_counter (stmt, counter_type, &c, &read_all, > -- > 2.30.0 >