Skip to content

Commit

Permalink
With LTO and profile-use, enable hotness info in opt remarks
Browse files Browse the repository at this point in the history
This is to match the behavior of non-LTO;
when -fsave-optimization-record is passed and PGO is available we enable
the generation of hotness information in the optimization records.

Differential Revision: https://reviews.llvm.org/D27332

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@288520 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
anemet committed Dec 2, 2016
1 parent 0a6cca5 commit d0cab34
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
26 changes: 19 additions & 7 deletions lib/Driver/Tools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3644,6 +3644,19 @@ VersionTuple visualstudio::getMSVCVersion(const Driver *D, const ToolChain &TC,
return VersionTuple();
}

static Arg *getLastProfileUseArg(const ArgList &Args) {
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_fno_profile_instr_use);

if (ProfileUseArg &&
ProfileUseArg->getOption().matches(options::OPT_fno_profile_instr_use))
ProfileUseArg = nullptr;

return ProfileUseArg;
}

static void addPGOAndCoverageFlags(Compilation &C, const Driver &D,
const InputInfo &Output, const ArgList &Args,
ArgStringList &CmdArgs) {
Expand All @@ -3668,13 +3681,7 @@ static void addPGOAndCoverageFlags(Compilation &C, const Driver &D,
D.Diag(diag::err_drv_argument_not_allowed_with)
<< PGOGenerateArg->getSpelling() << ProfileGenerateArg->getSpelling();

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_fno_profile_instr_use);
if (ProfileUseArg &&
ProfileUseArg->getOption().matches(options::OPT_fno_profile_instr_use))
ProfileUseArg = nullptr;
auto *ProfileUseArg = getLastProfileUseArg(Args);

if (PGOGenerateArg && ProfileUseArg)
D.Diag(diag::err_drv_argument_not_allowed_with)
Expand Down Expand Up @@ -8436,6 +8443,11 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA,
F = Output.getFilename();
F += ".opt.yaml";
CmdArgs.push_back(Args.MakeArgString(F));

if (getLastProfileUseArg(Args)) {
CmdArgs.push_back("-mllvm");
CmdArgs.push_back("-lto-pass-remarks-with-hotness");
}
}

// It seems that the 'e' option is completely ignored for dynamic executables
Expand Down
5 changes: 5 additions & 0 deletions test/Driver/darwin-ld.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,12 @@
// RUN: %clang -target x86_64-apple-darwin12 %t.o -fsave-optimization-record -### -o foo/bar.out 2> %t.log
// RUN: FileCheck -check-prefix=PASS_REMARKS_OUTPUT %s < %t.log
// PASS_REMARKS_OUTPUT: "-mllvm" "-lto-pass-remarks-output" "-mllvm" "foo/bar.out.opt.yaml"
// PASS_REMARKS_OUTPUT-NOT: -lto-pass-remarks-with-hotness

// RUN: %clang -target x86_64-apple-darwin12 %t.o -fsave-optimization-record -### 2> %t.log
// RUN: FileCheck -check-prefix=PASS_REMARKS_OUTPUT_NO_O %s < %t.log
// PASS_REMARKS_OUTPUT_NO_O: "-mllvm" "-lto-pass-remarks-output" "-mllvm" "a.out.opt.yaml"

// RUN: %clang -target x86_64-apple-darwin12 %t.o -fsave-optimization-record -fprofile-instr-use=blah -### -o foo/bar.out 2> %t.log
// RUN: FileCheck -check-prefix=PASS_REMARKS_WITH_HOTNESS %s < %t.log
// PASS_REMARKS_WITH_HOTNESS: "-mllvm" "-lto-pass-remarks-output" "-mllvm" "foo/bar.out.opt.yaml" "-mllvm" "-lto-pass-remarks-with-hotness"

0 comments on commit d0cab34

Please sign in to comment.