Proposal to add FDO profile quality related diagnostics

Indu Bhagat indu.bhagat@oracle.com
Tue Nov 20 23:10:00 GMT 2018


Proposal to add diagnostics to know which functions were not run in the
training run in FDO.

Motivation :
When using FDO, it is often desirable to know the quality of function profile.
This means knowing which functions have STALE, NO/MISSING or ZERO profiles. GCC
has diagnostics for STALE (Wcoverage-mismatch) and NO/MISSING profiles
(Wmissing-profile).

Stats regarding number of bbs, branches, number of edges profiled etc. are
available in the dump file.

It will be useful to add a new diagnostic, -Wprofile-quality for the case when
there are ZERO profiles, i.e, those functions which were not exercised in the
training run.
(I submitted a patch https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00508.html
  after which there will be some reliable information in the -fdump-ipa-profile
  dump file for the user to grep, but adding a adding a diagnostic gives user a
  direct way.)

For example, after the above-mentioned patch precise-ipa-dump-optinfo.patch.ver1 :
After the posted patch precise-ipa-dump-optinfo.patch.ver1, the way to know
which functions were not run in the training run in O1, O2, O3 etc is to grep
for text in the -fdump-ipa-profile dump file:

   "(estimated locally, globally 0)"

Proposal : Provide a more direct way than above. There are two options :

OPTION 1 : WARNING ONLY APPROACH
--------------------------------
1. Add a new warning -Wprofile-quality=[none|file|all]. Warning is disabled by
    default with -fprofile-use.

     -Wprofile-quality
     -Wprofile-quality=file
        emits a warning message for each compilation unit summarising the number of
        functions which were not profiled in the training run.
        "warning: XX out of YY functions not exercised in training run [-Wprofile-quality=]"

     -Wprofile-quality=all
        emits a warning message for each function which was not run in the training
        run, in addition to the above
        "warning: function XXXX not exercised in training run [-Wprofile-quality=]"

       Sample Output :
       "warning: XX out of YY functions not exercised in training run [-Wprofile-quality=]"
       "warning: function AAA not exercised in training run [-Wprofile-quality=]"
       "warning: function BBB not exercised in training run [-Wprofile-quality=]"

OPTION 2 : WARNING + OPT-INFO APPROACH
--------------------------------------
1. Add a new warning -Wprofile-quality. Warning is disabled by default.

    -Wprofile-quality
       emits a warning message for each compilation unit summarizing the number of
       functions which were profiled in the training run.
       "warning: XX out of YY functions not exercised in training run [-Wprofile-quality=]"

2. Next, using the dump_printf_loc API, add messages of MSG_NOTE dump_flag for
each function that was not run in the training run. This information is then
available to the user via flag -fopt-info-ipa.

Which option is preferable ?
OPTION 1 has the advantage that it is direct and information will not get diluted as
opt-info framework evolves.

Thanks



More information about the Gcc mailing list