[PM] Add support for instrumented PGO in the new pass manager (clang-side)

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

llvm-svn: 294961
This commit is contained in:
Davide Italiano 2017-02-13 16:07:05 +00:00
parent 509da1a46d
commit 945de43dbe
1 changed files with 22 additions and 2 deletions

View File

@ -61,6 +61,9 @@ using namespace llvm;
namespace {
// Default filename used for profile generation.
static constexpr StringLiteral DefaultProfileGenName = "default_%m.profraw";
class EmitAssemblyHelper {
DiagnosticsEngine &Diags;
const HeaderSearchOptions &HSOpts;
@ -448,7 +451,7 @@ void EmitAssemblyHelper::CreatePasses(legacy::PassManager &MPM,
if (!CodeGenOpts.InstrProfileOutput.empty())
PMBuilder.PGOInstrGen = CodeGenOpts.InstrProfileOutput;
else
PMBuilder.PGOInstrGen = "default_%m.profraw";
PMBuilder.PGOInstrGen = DefaultProfileGenName;
}
if (CodeGenOpts.hasProfileIRUse())
PMBuilder.PGOInstrUse = CodeGenOpts.ProfileInstrumentUsePath;
@ -775,7 +778,24 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager(
return;
TheModule->setDataLayout(TM->createDataLayout());
PassBuilder PB(TM.get());
PGOOptions PGOOpt;
// -fprofile-generate.
PGOOpt.RunProfileGen = CodeGenOpts.hasProfileIRInstr();
if (PGOOpt.RunProfileGen)
PGOOpt.ProfileGenFile = CodeGenOpts.InstrProfileOutput.empty() ?
DefaultProfileGenName : CodeGenOpts.InstrProfileOutput;
// -fprofile-use.
if (CodeGenOpts.hasProfileIRUse())
PGOOpt.ProfileUseFile = CodeGenOpts.ProfileInstrumentUsePath;
// Only pass a PGO options struct if -fprofile-generate or
// -fprofile-use were passed on the cmdline.
PassBuilder PB(TM.get(),
(PGOOpt.RunProfileGen ||
!PGOOpt.ProfileUseFile.empty()) ?
Optional<PGOOptions>(PGOOpt) : None);
LoopAnalysisManager LAM;
FunctionAnalysisManager FAM;