diff options
author | Lei Wang <wlei@fb.com> | 2024-10-28 10:13:45 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-28 10:13:45 -0700 |
commit | e517cfc531886bf6ed64b4e7109bb3141ac7f430 (patch) | |
tree | 1a9c8a718226fd9ad43e8360e73a515b45520e2a /clang/lib/Lex/ModuleMap.cpp | |
parent | f14743794587db102c6d1b20f9c87a1ac20decfd (diff) | |
download | llvm-e517cfc531886bf6ed64b4e7109bb3141ac7f430.zip llvm-e517cfc531886bf6ed64b4e7109bb3141ac7f430.tar.gz llvm-e517cfc531886bf6ed64b4e7109bb3141ac7f430.tar.bz2 |
[InstrPGO] Support cold function coverage instrumentation (#109837)
This patch adds support for cold function coverage instrumentation based
on sampling PGO counts. The major motivation is to detect dead functions
for the services that are optimized with sampling PGO. If a function is
covered by sampling profile count (e.g., those with an entry count > 0),
we choose to skip instrumenting those functions, which significantly
reduces the instrumentation overhead.
More details about the implementation and flags:
- Added a flag `--pgo-instrument-cold-function-only` in
`PGOInstrumentation.cpp` as the main switch to control skipping the
instrumentation.
- Built the extra instrumentation passes(a bundle of passes in
`addPGOInstrPasses`) under sampling PGO pipeline. This is controlled by
`--instrument-cold-function-only-path` flag.
- Added a driver flag `-fprofile-generate-cold-function-coverage`:
- 1) Config the flags in one place, i,e. adding
`--instrument-cold-function-only-path=<...>` and
`--pgo-function-entry-coverage`. Note that the instrumentation file path
is passed through `--instrument-sample-cold-function-path`, because we
cannot use the `PGOOptions.ProfileFile` as it's already used by
`-fprofile-sample-use=<...>`.
- 2) makes linker to link `compiler_rt.profile` lib(see
[ToolChain.cpp#L1125-L1131](https://github.com/llvm/llvm-project/blob/main/clang/lib/Driver/ToolChain.cpp#L1125-L1131)
).
- Added a flag(`--pgo-cold-instrument-entry-threshold`) to config entry
count to determine cold function.
Overall, the full command is like:
```
clang++ -O2 -fprofile-generate-cold-function-coverage=<...> -fprofile-sample-use=<...> code.cc -o code
```
Diffstat (limited to 'clang/lib/Lex/ModuleMap.cpp')
0 files changed, 0 insertions, 0 deletions