@@ -234,6 +234,19 @@ static bool dontUseFastISelFor(const Function &Fn) {
234234 });
235235}
236236
237+ static bool maintainPGOProfile (const TargetMachine &TM,
238+ CodeGenOptLevel OptLevel) {
239+ if (OptLevel != CodeGenOptLevel::None)
240+ return true ;
241+ if (TM.getPGOOption ()) {
242+ const PGOOptions &Options = *TM.getPGOOption ();
243+ return Options.Action == PGOOptions::PGOAction::IRUse ||
244+ Options.Action == PGOOptions::PGOAction::SampleUse ||
245+ Options.CSAction == PGOOptions::CSPGOAction::CSIRUse;
246+ }
247+ return false ;
248+ }
249+
237250namespace llvm {
238251
239252 // ===--------------------------------------------------------------------===//
@@ -395,6 +408,7 @@ SelectionDAGISel::~SelectionDAGISel() { delete CurDAG; }
395408
396409void SelectionDAGISelLegacy::getAnalysisUsage (AnalysisUsage &AU) const {
397410 CodeGenOptLevel OptLevel = Selector->OptLevel ;
411+ bool RegisterPGOPasses = maintainPGOProfile (Selector->TM , Selector->OptLevel );
398412 if (OptLevel != CodeGenOptLevel::None)
399413 AU.addRequired <AAResultsWrapperPass>();
400414 AU.addRequired <GCModuleInfo>();
@@ -403,15 +417,15 @@ void SelectionDAGISelLegacy::getAnalysisUsage(AnalysisUsage &AU) const {
403417 AU.addRequired <TargetLibraryInfoWrapperPass>();
404418 AU.addRequired <TargetTransformInfoWrapperPass>();
405419 AU.addRequired <AssumptionCacheTracker>();
406- if (UseMBPI && OptLevel != CodeGenOptLevel::None )
407- AU.addRequired <BranchProbabilityInfoWrapperPass>();
420+ if (UseMBPI && RegisterPGOPasses )
421+ AU.addRequired <BranchProbabilityInfoWrapperPass>();
408422 AU.addRequired <ProfileSummaryInfoWrapperPass>();
409423 // AssignmentTrackingAnalysis only runs if assignment tracking is enabled for
410424 // the module.
411425 AU.addRequired <AssignmentTrackingAnalysis>();
412426 AU.addPreserved <AssignmentTrackingAnalysis>();
413- if (OptLevel != CodeGenOptLevel::None )
414- LazyBlockFrequencyInfoPass::getLazyBFIAnalysisUsage (AU);
427+ if (RegisterPGOPasses )
428+ LazyBlockFrequencyInfoPass::getLazyBFIAnalysisUsage (AU);
415429 MachineFunctionPass::getAnalysisUsage (AU);
416430}
417431
@@ -464,6 +478,7 @@ void SelectionDAGISel::initializeAnalysisResults(
464478 (void )MatchFilterFuncName;
465479#endif
466480
481+ bool RegisterPGOPasses = maintainPGOProfile (TM, OptLevel);
467482 TII = MF->getSubtarget ().getInstrInfo ();
468483 TLI = MF->getSubtarget ().getTargetLowering ();
469484 RegInfo = &MF->getRegInfo ();
@@ -474,7 +489,7 @@ void SelectionDAGISel::initializeAnalysisResults(
474489 auto *PSI = MAMP.getCachedResult <ProfileSummaryAnalysis>(*Fn.getParent ());
475490 BlockFrequencyInfo *BFI = nullptr ;
476491 FAM.getResult <BlockFrequencyAnalysis>(Fn);
477- if (PSI && PSI->hasProfileSummary () && OptLevel != CodeGenOptLevel::None )
492+ if (PSI && PSI->hasProfileSummary () && RegisterPGOPasses )
478493 BFI = &FAM.getResult <BlockFrequencyAnalysis>(Fn);
479494
480495 FunctionVarLocs const *FnVarLocs = nullptr ;
@@ -492,7 +507,7 @@ void SelectionDAGISel::initializeAnalysisResults(
492507 // into account). That's unfortunate but OK because it just means we won't
493508 // ask for passes that have been required anyway.
494509
495- if (UseMBPI && OptLevel != CodeGenOptLevel::None )
510+ if (UseMBPI && RegisterPGOPasses )
496511 FuncInfo->BPI = &FAM.getResult <BranchProbabilityAnalysis>(Fn);
497512 else
498513 FuncInfo->BPI = nullptr ;
@@ -518,6 +533,7 @@ void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
518533 (void )MatchFilterFuncName;
519534#endif
520535
536+ bool RegisterPGOPasses = maintainPGOProfile (TM, OptLevel);
521537 TII = MF->getSubtarget ().getInstrInfo ();
522538 TLI = MF->getSubtarget ().getTargetLowering ();
523539 RegInfo = &MF->getRegInfo ();
@@ -528,7 +544,7 @@ void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
528544 AC = &MFP.getAnalysis <AssumptionCacheTracker>().getAssumptionCache (Fn);
529545 auto *PSI = &MFP.getAnalysis <ProfileSummaryInfoWrapperPass>().getPSI ();
530546 BlockFrequencyInfo *BFI = nullptr ;
531- if (PSI && PSI->hasProfileSummary () && OptLevel != CodeGenOptLevel::None )
547+ if (PSI && PSI->hasProfileSummary () && RegisterPGOPasses )
532548 BFI = &MFP.getAnalysis <LazyBlockFrequencyInfoPass>().getBFI ();
533549
534550 FunctionVarLocs const *FnVarLocs = nullptr ;
@@ -549,7 +565,7 @@ void SelectionDAGISel::initializeAnalysisResults(MachineFunctionPass &MFP) {
549565 // into account). That's unfortunate but OK because it just means we won't
550566 // ask for passes that have been required anyway.
551567
552- if (UseMBPI && OptLevel != CodeGenOptLevel::None )
568+ if (UseMBPI && RegisterPGOPasses )
553569 FuncInfo->BPI =
554570 &MFP.getAnalysis <BranchProbabilityInfoWrapperPass>().getBPI ();
555571 else
0 commit comments