mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 23:51:56 +00:00
[Driver] Add -fsample-profile-use-profi
This patch enable `-sample-profile-use-profi` in Clang frontend as user-facing feature. By using this patch, we can use the cflag of `-fsample-profile-use-profi` instead of `-mllvm -sample-profile-use-profi`. Reviewed By: hans, MaskRay Differential Revision: https://reviews.llvm.org/D136846
This commit is contained in:
parent
70c781f4b6
commit
13f83365cd
@ -2241,6 +2241,15 @@ usual build cycle when using sample profilers for optimization:
|
||||
|
||||
$ clang++ -O2 -gline-tables-only -fprofile-sample-use=code.prof code.cc -o code
|
||||
|
||||
[OPTIONAL] Sampling-based profiles can have inaccuracies or missing block/
|
||||
edge counters. The profile inference algorithm (profi) can be used to infer
|
||||
missing blocks and edge counts, and improve the quality of profile data.
|
||||
Enable it with ``-fsample-profile-use-profi``.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ clang++ -O2 -gline-tables-only -fprofile-sample-use=code.prof \
|
||||
-fsample-profile-use-profi code.cc -o code
|
||||
|
||||
Sample Profile Formats
|
||||
""""""""""""""""""""""
|
||||
|
@ -1251,6 +1251,13 @@ def fprofile_sample_accurate : Flag<["-"], "fprofile-sample-accurate">,
|
||||
as cold. Otherwise, treat callsites without profile samples as if
|
||||
we have no profile}]>,
|
||||
MarshallingInfoFlag<CodeGenOpts<"ProfileSampleAccurate">>;
|
||||
def fsample_profile_use_profi : Flag<["-"], "fsample-profile-use-profi">,
|
||||
Flags<[NoXarchOption, CC1Option]>, Group<f_Group>,
|
||||
HelpText<"Use profi to infer block and edge counts">,
|
||||
DocBrief<[{Infer block and edge counts. If the profiles have errors or missing
|
||||
blocks caused by sampling, profile inference (profi) can convert
|
||||
basic block counts to branch probabilites to fix them by extended
|
||||
and re-engineered classic MCMF (min-cost max-flow) approach.}]>;
|
||||
def fno_profile_sample_accurate : Flag<["-"], "fno-profile-sample-accurate">,
|
||||
Group<f_Group>, Flags<[NoXarchOption]>;
|
||||
def fauto_profile : Flag<["-"], "fauto-profile">, Group<f_Group>,
|
||||
|
@ -5729,6 +5729,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fclang_abi_compat_EQ);
|
||||
|
||||
if (getLastProfileSampleUseArg(Args) &&
|
||||
Args.hasArg(options::OPT_fsample_profile_use_profi)) {
|
||||
CmdArgs.push_back("-mllvm");
|
||||
CmdArgs.push_back("-sample-profile-use-profi");
|
||||
}
|
||||
|
||||
// Add runtime flag for PS4/PS5 when PGO, coverage, or sanitizers are enabled.
|
||||
if (RawTriple.isPS() &&
|
||||
!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
|
||||
|
4
clang/test/Driver/pgo-sample-use-profi.c
Normal file
4
clang/test/Driver/pgo-sample-use-profi.c
Normal file
@ -0,0 +1,4 @@
|
||||
/// Test if profi flat is enabled in frontend as user-facing feature.
|
||||
// RUN: %clang -c -fsample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s
|
||||
|
||||
// CHECK: "-mllvm" "-sample-profile-use-profi"
|
Loading…
Reference in New Issue
Block a user