@@ -359,14 +359,16 @@ void PassBuilder::invokeVectorizerStartEPCallbacks(FunctionPassManager &FPM,
359359 C (FPM, Level);
360360}
361361void PassBuilder::invokeOptimizerEarlyEPCallbacks (ModulePassManager &MPM,
362- OptimizationLevel Level) {
362+ OptimizationLevel Level,
363+ ThinOrFullLTOPhase Phase) {
363364 for (auto &C : OptimizerEarlyEPCallbacks)
364- C (MPM, Level);
365+ C (MPM, Level, Phase );
365366}
366367void PassBuilder::invokeOptimizerLastEPCallbacks (ModulePassManager &MPM,
367- OptimizationLevel Level) {
368+ OptimizationLevel Level,
369+ ThinOrFullLTOPhase Phase) {
368370 for (auto &C : OptimizerLastEPCallbacks)
369- C (MPM, Level);
371+ C (MPM, Level, Phase );
370372}
371373void PassBuilder::invokeFullLinkTimeOptimizationEarlyEPCallbacks (
372374 ModulePassManager &MPM, OptimizationLevel Level) {
@@ -1464,7 +1466,7 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
14641466 if (EnableGlobalAnalyses)
14651467 MPM.addPass (RecomputeGlobalsAAPass ());
14661468
1467- invokeOptimizerEarlyEPCallbacks (MPM, Level);
1469+ invokeOptimizerEarlyEPCallbacks (MPM, Level, LTOPhase );
14681470
14691471 FunctionPassManager OptimizePM;
14701472 // Scheduling LoopVersioningLICM when inlining is over, because after that
@@ -1559,7 +1561,7 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
15591561 MPM.addPass (createModuleToFunctionPassAdaptor (std::move (OptimizePM),
15601562 PTO.EagerlyInvalidateAnalyses ));
15611563
1562- invokeOptimizerLastEPCallbacks (MPM, Level);
1564+ invokeOptimizerLastEPCallbacks (MPM, Level, LTOPhase );
15631565
15641566 // Split out cold code. Splitting is done late to avoid hiding context from
15651567 // other optimizations and inadvertently regressing performance. The tradeoff
@@ -1716,8 +1718,10 @@ PassBuilder::buildThinLTOPreLinkDefaultPipeline(OptimizationLevel Level) {
17161718 // Handle Optimizer{Early,Last}EPCallbacks added by clang on PreLink. Actual
17171719 // optimization is going to be done in PostLink stage, but clang can't add
17181720 // callbacks there in case of in-process ThinLTO called by linker.
1719- invokeOptimizerEarlyEPCallbacks (MPM, Level);
1720- invokeOptimizerLastEPCallbacks (MPM, Level);
1721+ invokeOptimizerEarlyEPCallbacks (MPM, Level,
1722+ /* Phase=*/ ThinOrFullLTOPhase::ThinLTOPreLink);
1723+ invokeOptimizerLastEPCallbacks (MPM, Level,
1724+ /* Phase=*/ ThinOrFullLTOPhase::ThinLTOPreLink);
17211725
17221726 // Emit annotation remarks.
17231727 addAnnotationRemarksPass (MPM);
@@ -2198,7 +2202,7 @@ PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
21982202 MPM.addPass (createModuleToFunctionPassAdaptor (std::move (FPM)));
21992203 }
22002204
2201- invokeOptimizerEarlyEPCallbacks (MPM, Level);
2205+ invokeOptimizerEarlyEPCallbacks (MPM, Level, Phase );
22022206
22032207 if (!VectorizerStartEPCallbacks.empty ()) {
22042208 FunctionPassManager FPM;
@@ -2216,7 +2220,7 @@ PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level,
22162220 CoroPM.addPass (GlobalDCEPass ());
22172221 MPM.addPass (CoroConditionalWrapper (std::move (CoroPM)));
22182222
2219- invokeOptimizerLastEPCallbacks (MPM, Level);
2223+ invokeOptimizerLastEPCallbacks (MPM, Level, Phase );
22202224
22212225 if (isLTOPreLink (Phase))
22222226 addRequiredLTOPreLinkPasses (MPM);
0 commit comments