[clang] [llvm] [InstrPGO] Instrument sampling profile based cold function (PR #109837)
Lei Wang via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 2 10:11:56 PDT 2024
================
@@ -1784,6 +1784,12 @@ defm debug_info_for_profiling : BoolFOption<"debug-info-for-profiling",
PosFlag<SetTrue, [], [ClangOption, CC1Option],
"Emit extra debug info to make sample profile more accurate">,
NegFlag<SetFalse>>;
+def fprofile_generate_cold_function_coverage : Flag<["-"], "fprofile-generate-cold-function-coverage">,
----------------
wlei-llvm wrote:
> I meant, why not just use `clang ... -mllvm -instrument-cold-function-coverage`? Is this a clang - only feature (i.e. rust can't use it?) Is it just for symmetry with the current PGO flags?
>
> (This is not a pushback, mainly curious. Also the patch would be quite smaller if you didn't need to pass through the flags from clang to llvm)
I see, thanks for the suggestion! We also need to link runtime lib(`compiler_rt.profile.a`)
but yeah, I agree it's possible to pass directly to llvm and linker without through clang. Then the full command line would be like
```
clang ... -mllvm -instrument-cold-function-coverage -mllvm -instrument-sample-cold-function-path=<file-path> -mllvm --pgo-function-entry-coverage
ld.lld ... --u__llvm_runtime_variable .../lib/x86_64-unknown-linux-gnu/libclang_rt.profile.a
```
So yes, adding the clang driver flag is kind of to mirror current[ IRPGO flags](https://fburl.com/na3cp3gn), for easy maintenance purpose(given that `-fprofile-generate` doesn't work with `-fprofile-sample-use`) and also to centralize the configuration for the convenience. IMO, the `compiler_rt` is probably the main blocker here, I didn't find an easy way to bundle it with a llvm flag.
Appreciate any further suggestions!
https://github.com/llvm/llvm-project/pull/109837
More information about the cfe-commits
mailing list