mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-23 19:59:57 +00:00
Hook the sample PGO machinery in the new PM
Summary: This patch hooks up SampleProfileLoaderPass with the new PM. Reviewers: chandlerc, davidxl, davide, tejohnson Reviewed By: chandlerc, tejohnson Subscribers: tejohnson, llvm-commits, sanjoy Differential Revision: https://reviews.llvm.org/D34720 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306763 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a633437a75
commit
ade8407c6e
@ -31,8 +31,8 @@ class TargetMachine;
|
||||
struct PGOOptions {
|
||||
std::string ProfileGenFile = "";
|
||||
std::string ProfileUseFile = "";
|
||||
std::string SampleProfileFile = "";
|
||||
bool RunProfileGen = false;
|
||||
bool SamplePGO = false;
|
||||
};
|
||||
|
||||
/// \brief This class provides access to building LLVM's passes.
|
||||
|
@ -21,6 +21,10 @@ namespace llvm {
|
||||
class SampleProfileLoaderPass : public PassInfoMixin<SampleProfileLoaderPass> {
|
||||
public:
|
||||
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
|
||||
SampleProfileLoaderPass(std::string File = "") : ProfileFileName(File) {}
|
||||
|
||||
private:
|
||||
std::string ProfileFileName;
|
||||
};
|
||||
|
||||
} // End llvm namespace
|
||||
|
@ -535,13 +535,17 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
|
||||
|
||||
// Add all the requested passes for PGO, if requested.
|
||||
if (PGOOpt) {
|
||||
assert(PGOOpt->RunProfileGen || PGOOpt->SamplePGO ||
|
||||
assert(PGOOpt->RunProfileGen || !PGOOpt->SampleProfileFile.empty() ||
|
||||
!PGOOpt->ProfileUseFile.empty());
|
||||
addPGOInstrPasses(MPM, DebugLogging, Level, PGOOpt->RunProfileGen,
|
||||
PGOOpt->ProfileGenFile, PGOOpt->ProfileUseFile);
|
||||
if (PGOOpt->SampleProfileFile.empty())
|
||||
addPGOInstrPasses(MPM, DebugLogging, Level, PGOOpt->RunProfileGen,
|
||||
PGOOpt->ProfileGenFile, PGOOpt->ProfileUseFile);
|
||||
else
|
||||
MPM.addPass(SampleProfileLoaderPass(PGOOpt->SampleProfileFile));
|
||||
|
||||
// Indirect call promotion that promotes intra-module targes only.
|
||||
MPM.addPass(PGOIndirectCallPromotion(false, PGOOpt && PGOOpt->SamplePGO));
|
||||
MPM.addPass(PGOIndirectCallPromotion(
|
||||
false, PGOOpt && !PGOOpt->SampleProfileFile.empty()));
|
||||
}
|
||||
|
||||
// Require the GlobalsAA analysis for the module so we can query it within
|
||||
@ -776,9 +780,9 @@ PassBuilder::buildThinLTODefaultPipeline(OptimizationLevel Level,
|
||||
// During the ThinLTO backend phase we perform early indirect call promotion
|
||||
// here, before globalopt. Otherwise imported available_externally functions
|
||||
// look unreferenced and are removed.
|
||||
MPM.addPass(PGOIndirectCallPromotion(true /* InLTO */,
|
||||
PGOOpt && PGOOpt->SamplePGO &&
|
||||
!PGOOpt->ProfileUseFile.empty()));
|
||||
MPM.addPass(PGOIndirectCallPromotion(
|
||||
true /* InLTO */, PGOOpt && !PGOOpt->SampleProfileFile.empty() &&
|
||||
!PGOOpt->ProfileUseFile.empty()));
|
||||
|
||||
// Add the core simplification pipeline.
|
||||
MPM.addPass(buildModuleSimplificationPipeline(Level, DebugLogging));
|
||||
@ -818,8 +822,8 @@ ModulePassManager PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
|
||||
// left by the earlier promotion pass that promotes intra-module targets.
|
||||
// This two-step promotion is to save the compile time. For LTO, it should
|
||||
// produce the same result as if we only do promotion here.
|
||||
MPM.addPass(PGOIndirectCallPromotion(true /* InLTO */,
|
||||
PGOOpt && PGOOpt->SamplePGO));
|
||||
MPM.addPass(PGOIndirectCallPromotion(
|
||||
true /* InLTO */, PGOOpt && !PGOOpt->SampleProfileFile.empty()));
|
||||
|
||||
// Propagate constants at call sites into the functions they call. This
|
||||
// opens opportunities for globalopt (and inlining) by substituting function
|
||||
|
@ -1484,7 +1484,8 @@ bool SampleProfileLoader::runOnFunction(Function &F) {
|
||||
PreservedAnalyses SampleProfileLoaderPass::run(Module &M,
|
||||
ModuleAnalysisManager &AM) {
|
||||
|
||||
SampleProfileLoader SampleLoader(SampleProfileFile);
|
||||
SampleProfileLoader SampleLoader(
|
||||
ProfileFileName.empty() ? SampleProfileFile : ProfileFileName);
|
||||
|
||||
SampleLoader.doInitialization(M);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user