mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-19 09:26:59 +00:00
Add flags to disable profile generation.
This patch adds flags -fno-profile-instr-generate and -fno-profile-instr-use, and the GCC aliases -fno-profile-generate and -fno-profile-use. These flags are used in situations where users need to disable profile generation or use for specific files in a build, without affecting other files. llvm-svn: 244153
This commit is contained in:
parent
70926aed6b
commit
758f3f542a
@ -1534,6 +1534,19 @@ with respect to profile creation and use.
|
||||
profile file, it reads from that file. If ``pathname`` is a directory name,
|
||||
it reads from ``pathname/default.profdata``.
|
||||
|
||||
Disabling Instrumentation
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In certain situations, it may be useful to disable profile generation or use
|
||||
for specific files in a build, without affecting the main compilation flags
|
||||
used for the other files in the project.
|
||||
|
||||
In these cases, you can use the flag ``-fno-profile-instr-generate`` (or
|
||||
``-fno-profile-generate``) to disable profile generation, and
|
||||
``-fno-profile-instr-use`` (or ``-fno-profile-use``) to disable profile use.
|
||||
|
||||
Note that these flags should appear after the corresponding profile
|
||||
flags to have an effect.
|
||||
|
||||
Controlling Size of Debug Information
|
||||
-------------------------------------
|
||||
|
@ -446,6 +446,16 @@ def fprofile_use : Flag<["-"], "fprofile-use">, Group<f_Group>,
|
||||
def fprofile_use_EQ : Joined<["-"], "fprofile-use=">,
|
||||
Group<f_Group>, Flags<[DriverOption]>, MetaVarName<"<pathname>">,
|
||||
HelpText<"Use instrumentation data for profile-guided optimization. If pathname is a directory, it reads from <pathname>/default.profdata. Otherwise, it reads from file <pathname>.">;
|
||||
def fno_profile_instr_generate : Flag<["-"], "fno-profile-instr-generate">,
|
||||
Group<f_Group>, Flags<[DriverOption]>,
|
||||
HelpText<"Disable generation of profile instrumentation.">;
|
||||
def fno_profile_generate : Flag<["-"], "fno-profile-generate">,
|
||||
Alias<fno_profile_instr_generate>;
|
||||
def fno_profile_instr_use : Flag<["-"], "fno-profile-instr-use">,
|
||||
Group<f_Group>, Flags<[DriverOption]>,
|
||||
HelpText<"Disable using instrumentation data for profile-guided optimization">;
|
||||
def fno_profile_use : Flag<["-"], "fno-profile-use">,
|
||||
Alias<fno_profile_instr_use>;
|
||||
|
||||
def fblocks : Flag<["-"], "fblocks">, Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Enable the 'blocks' language feature">;
|
||||
|
@ -2848,42 +2848,53 @@ static void addPGOAndCoverageFlags(Compilation &C, const Driver &D,
|
||||
auto *ProfileGenerateArg = Args.getLastArg(
|
||||
options::OPT_fprofile_instr_generate,
|
||||
options::OPT_fprofile_instr_generate_EQ, options::OPT_fprofile_generate,
|
||||
options::OPT_fprofile_generate_EQ);
|
||||
options::OPT_fprofile_generate_EQ,
|
||||
options::OPT_fno_profile_instr_generate);
|
||||
if (ProfileGenerateArg &&
|
||||
ProfileGenerateArg->getOption().matches(
|
||||
options::OPT_fno_profile_instr_generate))
|
||||
ProfileGenerateArg = nullptr;
|
||||
|
||||
auto *ProfileUseArg = Args.getLastArg(
|
||||
options::OPT_fprofile_instr_use, options::OPT_fprofile_instr_use_EQ,
|
||||
options::OPT_fprofile_use, options::OPT_fprofile_use_EQ);
|
||||
options::OPT_fprofile_use, options::OPT_fprofile_use_EQ,
|
||||
options::OPT_fno_profile_instr_use);
|
||||
if (ProfileUseArg &&
|
||||
ProfileUseArg->getOption().matches(options::OPT_fno_profile_instr_use))
|
||||
ProfileUseArg = nullptr;
|
||||
|
||||
if (ProfileGenerateArg && ProfileUseArg)
|
||||
D.Diag(diag::err_drv_argument_not_allowed_with)
|
||||
<< ProfileGenerateArg->getSpelling() << ProfileUseArg->getSpelling();
|
||||
|
||||
if (ProfileGenerateArg &&
|
||||
ProfileGenerateArg->getOption().matches(
|
||||
options::OPT_fprofile_instr_generate_EQ))
|
||||
ProfileGenerateArg->render(Args, CmdArgs);
|
||||
else if (ProfileGenerateArg &&
|
||||
ProfileGenerateArg->getOption().matches(
|
||||
options::OPT_fprofile_generate_EQ)) {
|
||||
SmallString<128> Path(ProfileGenerateArg->getValue());
|
||||
llvm::sys::path::append(Path, "default.profraw");
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(Twine("-fprofile-instr-generate=") + Path));
|
||||
} else
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_fprofile_instr_generate);
|
||||
if (ProfileGenerateArg) {
|
||||
if (ProfileGenerateArg->getOption().matches(
|
||||
options::OPT_fprofile_instr_generate_EQ))
|
||||
ProfileGenerateArg->render(Args, CmdArgs);
|
||||
else if (ProfileGenerateArg->getOption().matches(
|
||||
options::OPT_fprofile_generate_EQ)) {
|
||||
SmallString<128> Path(ProfileGenerateArg->getValue());
|
||||
llvm::sys::path::append(Path, "default.profraw");
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(Twine("-fprofile-instr-generate=") + Path));
|
||||
} else
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_fprofile_instr_generate);
|
||||
}
|
||||
|
||||
if (ProfileUseArg &&
|
||||
ProfileUseArg->getOption().matches(options::OPT_fprofile_instr_use_EQ))
|
||||
ProfileUseArg->render(Args, CmdArgs);
|
||||
else if (ProfileUseArg &&
|
||||
(ProfileUseArg->getOption().matches(options::OPT_fprofile_use_EQ) ||
|
||||
ProfileUseArg->getOption().matches(
|
||||
options::OPT_fprofile_instr_use))) {
|
||||
SmallString<128> Path(
|
||||
ProfileUseArg->getNumValues() == 0 ? "" : ProfileUseArg->getValue());
|
||||
if (Path.empty() || llvm::sys::fs::is_directory(Path))
|
||||
llvm::sys::path::append(Path, "default.profdata");
|
||||
CmdArgs.push_back(Args.MakeArgString(Twine("-fprofile-instr-use=") + Path));
|
||||
if (ProfileUseArg) {
|
||||
if (ProfileUseArg->getOption().matches(options::OPT_fprofile_instr_use_EQ))
|
||||
ProfileUseArg->render(Args, CmdArgs);
|
||||
else if ((ProfileUseArg->getOption().matches(
|
||||
options::OPT_fprofile_use_EQ) ||
|
||||
ProfileUseArg->getOption().matches(
|
||||
options::OPT_fprofile_instr_use))) {
|
||||
SmallString<128> Path(
|
||||
ProfileUseArg->getNumValues() == 0 ? "" : ProfileUseArg->getValue());
|
||||
if (Path.empty() || llvm::sys::fs::is_directory(Path))
|
||||
llvm::sys::path::append(Path, "default.profdata");
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(Twine("-fprofile-instr-use=") + Path));
|
||||
}
|
||||
}
|
||||
|
||||
if (Args.hasArg(options::OPT_ftest_coverage) ||
|
||||
|
@ -86,10 +86,20 @@
|
||||
// RUN: %clang -### -S -fprofile-generate=dir -fprofile-use=dir %s 2>&1 | FileCheck -check-prefix=CHECK-NO-MIX-GEN-USE %s
|
||||
// RUN: %clang -### -S -fprofile-generate=dir -fprofile-instr-use %s 2>&1 | FileCheck -check-prefix=CHECK-NO-MIX-GEN-USE %s
|
||||
// RUN: %clang -### -S -fprofile-generate=dir -fprofile-instr-use=file %s 2>&1 | FileCheck -check-prefix=CHECK-NO-MIX-GEN-USE %s
|
||||
// RUN: %clang -### -S -fprofile-instr-generate=file -fno-profile-instr-generate %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-GEN %s
|
||||
// RUN: %clang -### -S -fprofile-instr-generate=file -fno-profile-generate %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-GEN %s
|
||||
// RUN: %clang -### -S -fprofile-generate=dir -fno-profile-generate %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-GEN %s
|
||||
// RUN: %clang -### -S -fprofile-generate=dir -fno-profile-instr-generate %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-GEN %s
|
||||
// RUN: %clang -### -S -fprofile-instr-use=file -fno-profile-instr-use %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-USE %s
|
||||
// RUN: %clang -### -S -fprofile-instr-use=file -fno-profile-use %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-USE %s
|
||||
// RUN: %clang -### -S -fprofile-use=file -fno-profile-use %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-USE %s
|
||||
// RUN: %clang -### -S -fprofile-use=file -fno-profile-instr-use %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-USE %s
|
||||
// CHECK-PROFILE-GENERATE: "-fprofile-instr-generate"
|
||||
// CHECK-PROFILE-GENERATE-DIR: "-fprofile-instr-generate=/some/dir{{/|\\\\}}default.profraw"
|
||||
// CHECK-PROFILE-GENERATE-FILE: "-fprofile-instr-generate=/tmp/somefile.profraw"
|
||||
// CHECK-NO-MIX-GEN-USE: '{{[a-z=-]*}}' not allowed with '{{[a-z=-]*}}'
|
||||
// CHECK-DISABLE-GEN-NOT: "-fprofile-instr-generate"
|
||||
// CHECK-DISABLE-USE-NOT: "-fprofile-instr-use"
|
||||
|
||||
// RUN: %clang -### -S -fprofile-use %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-USE %s
|
||||
// RUN: %clang -### -S -fprofile-instr-use %s 2>&1 | FileCheck -check-prefix=CHECK-PROFILE-USE %s
|
||||
|
Loading…
x
Reference in New Issue
Block a user