[Pipeline] Don't run EarlyFPM in LTO post link
EarlyFPM cleans up the output of the frontend. This isn't necessary in post link pipelines as the pre link pipeline already ran this. ~0.4% savings in ThinLTO builds: https://llvm-compile-time-tracker.com/compare.php?from=8a5d4eb775c644d8683f24817d44c510d2b853b7&to=3580252a2162eadca0da99f1eeaa112f74a0353d&stat=instructions:u Reviewed By: tejohnson Differential Revision: https://reviews.llvm.org/D145403
This commit is contained in:
@@ -965,6 +965,10 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
|
||||
ThinOrFullLTOPhase Phase) {
|
||||
assert(Level != OptimizationLevel::O0 &&
|
||||
"Should not be used for O0 pipeline");
|
||||
|
||||
assert(Phase != ThinOrFullLTOPhase::FullLTOPostLink &&
|
||||
"FullLTOPostLink shouldn't call buildModuleSimplificationPipeline!");
|
||||
|
||||
ModulePassManager MPM;
|
||||
|
||||
// Place pseudo probe instrumentation as the first pass of the pipeline to
|
||||
@@ -999,25 +1003,28 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
|
||||
if (Phase == ThinOrFullLTOPhase::ThinLTOPostLink && !LoadSampleProfile)
|
||||
MPM.addPass(PGOIndirectCallPromotion(true /* InLTO */, HasSampleProfile));
|
||||
|
||||
// Do basic inference of function attributes from known properties of system
|
||||
// libraries and other oracles.
|
||||
MPM.addPass(InferFunctionAttrsPass());
|
||||
MPM.addPass(CoroEarlyPass());
|
||||
|
||||
// Create an early function pass manager to cleanup the output of the
|
||||
// frontend.
|
||||
FunctionPassManager EarlyFPM;
|
||||
// Lower llvm.expect to metadata before attempting transforms.
|
||||
// Compare/branch metadata may alter the behavior of passes like SimplifyCFG.
|
||||
EarlyFPM.addPass(LowerExpectIntrinsicPass());
|
||||
EarlyFPM.addPass(SimplifyCFGPass());
|
||||
EarlyFPM.addPass(SROAPass(SROAOptions::ModifyCFG));
|
||||
EarlyFPM.addPass(EarlyCSEPass());
|
||||
if (Level == OptimizationLevel::O3)
|
||||
EarlyFPM.addPass(CallSiteSplittingPass());
|
||||
// frontend. Not necessary with LTO post link pipelines since the pre link
|
||||
// pipeline already cleaned up the frontend output.
|
||||
if (Phase != ThinOrFullLTOPhase::ThinLTOPostLink) {
|
||||
// Do basic inference of function attributes from known properties of system
|
||||
// libraries and other oracles.
|
||||
MPM.addPass(InferFunctionAttrsPass());
|
||||
MPM.addPass(CoroEarlyPass());
|
||||
|
||||
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(EarlyFPM),
|
||||
PTO.EagerlyInvalidateAnalyses));
|
||||
FunctionPassManager EarlyFPM;
|
||||
// Lower llvm.expect to metadata before attempting transforms.
|
||||
// Compare/branch metadata may alter the behavior of passes like
|
||||
// SimplifyCFG.
|
||||
EarlyFPM.addPass(LowerExpectIntrinsicPass());
|
||||
EarlyFPM.addPass(SimplifyCFGPass());
|
||||
EarlyFPM.addPass(SROAPass(SROAOptions::ModifyCFG));
|
||||
EarlyFPM.addPass(EarlyCSEPass());
|
||||
if (Level == OptimizationLevel::O3)
|
||||
EarlyFPM.addPass(CallSiteSplittingPass());
|
||||
MPM.addPass(createModuleToFunctionPassAdaptor(
|
||||
std::move(EarlyFPM), PTO.EagerlyInvalidateAnalyses));
|
||||
}
|
||||
|
||||
if (LoadSampleProfile) {
|
||||
// Annotate sample profile right after early FPM to ensure freshness of
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
; USE_POST_LINK: Running pass: PGOMemOPSizeOpt
|
||||
; SAMPLE_USE_O: Running pass: AddDiscriminatorsPass
|
||||
; SAMPLE_USE_PRE_LINK: Running pass: AddDiscriminatorsPass
|
||||
; SAMPLE_USE: Running pass: LowerExpectIntrinsicPass
|
||||
; SAMPLE_USE: Running pass: SimplifyCFGPass
|
||||
; SAMPLE_USE: Running pass: SROAPass
|
||||
; SAMPLE_USE: Running pass: EarlyCSEPass
|
||||
; SAMPLE_USE_PRE_LINK: Running pass: LowerExpectIntrinsicPass
|
||||
; SAMPLE_USE_PRE_LINK: Running pass: SimplifyCFGPass
|
||||
; SAMPLE_USE_PRE_LINK: Running pass: SROAPass
|
||||
; SAMPLE_USE_PRE_LINK: Running pass: EarlyCSEPass
|
||||
; SAMPLE_USE: Running pass: SampleProfileLoaderPass
|
||||
; SAMPLE_USE_O: Running pass: PGOIndirectCallPromotion
|
||||
; SAMPLE_USE_POST_LINK-NOT: Running pass: GlobalOptPass
|
||||
|
||||
@@ -43,25 +43,18 @@
|
||||
; CHECK-POSTLINK-O-NEXT: Running analysis: ProfileSummaryAnalysis
|
||||
; CHECK-POSTLINK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
|
||||
; CHECK-POSTLINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
|
||||
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running pass: CoroEarlyPass
|
||||
; CHECK-O-NEXT: Running pass: LowerExpectIntrinsicPass
|
||||
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetIRAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AssumptionAnalysis
|
||||
; CHECK-O-NEXT: Running pass: SROAPass
|
||||
; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
||||
; CHECK-O-NEXT: Running pass: OpenMPOptPass
|
||||
; CHECK-POSTLINK-O-NEXT: Running pass: LowerTypeTestsPass
|
||||
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
||||
; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AssumptionAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: TargetIRAnalysis
|
||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||
; CHECK-O-NEXT: Running pass: GlobalOptPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running pass: PromotePass
|
||||
; CHECK-O-NEXT: Running pass: InstCombinePass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AAManager
|
||||
; CHECK-O-NEXT: Running analysis: BasicAA
|
||||
; CHECK-O-NEXT: Running analysis: ScopedNoAliasAA
|
||||
|
||||
@@ -28,25 +28,18 @@
|
||||
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
|
||||
; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
|
||||
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running pass: CoroEarlyPass
|
||||
; CHECK-O-NEXT: Running pass: LowerExpectIntrinsicPass
|
||||
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetIRAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AssumptionAnalysis
|
||||
; CHECK-O-NEXT: Running pass: SROAPass
|
||||
; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
||||
; CHECK-O-NEXT: Running pass: OpenMPOptPass
|
||||
; CHECK-O-NEXT: Running pass: LowerTypeTestsPass
|
||||
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
||||
; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AssumptionAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: TargetIRAnalysis
|
||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||
; CHECK-O-NEXT: Running pass: GlobalOptPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running pass: PromotePass
|
||||
; CHECK-O-NEXT: Running pass: InstCombinePass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AAManager
|
||||
; CHECK-O-NEXT: Running analysis: BasicAA
|
||||
; CHECK-O-NEXT: Running analysis: ScopedNoAliasAA
|
||||
|
||||
@@ -29,30 +29,23 @@
|
||||
; CHECK-NOEXT: {{^}}
|
||||
|
||||
; CHECK-EP-PIPELINE-START: Running pass: NoOpModulePass
|
||||
; CHECK-O: Running pass: InferFunctionAttrsPass
|
||||
; CHECK-O: Running pass: SampleProfileLoaderPass
|
||||
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running pass: CoroEarlyPass
|
||||
; CHECK-O-NEXT: Running pass: LowerExpectIntrinsicPass
|
||||
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetIRAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AssumptionAnalysis
|
||||
; CHECK-O-NEXT: Running pass: SROAPass
|
||||
; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-O-NEXT: Running pass: EarlyCSEPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
|
||||
; CHECK-O-NEXT: Running pass: SampleProfileLoaderPass
|
||||
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
|
||||
; CHECK-O-NEXT: Running pass: PGOIndirectCallPromotion
|
||||
; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
|
||||
; CHECK-O-NEXT: Running pass: OpenMPOptPass
|
||||
; CHECK-O-NEXT: Running pass: LowerTypeTestsPass
|
||||
; CHECK-O-NEXT: Running pass: IPSCCPPass
|
||||
; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AssumptionAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: TargetIRAnalysis
|
||||
; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
|
||||
; CHECK-O-NEXT: Running pass: GlobalOptPass
|
||||
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
|
||||
; CHECK-O-NEXT: Running pass: PromotePass
|
||||
; CHECK-O-NEXT: Running pass: InstCombinePass
|
||||
; CHECK-O-NEXT: Running analysis: AAManager on foo
|
||||
|
||||
Reference in New Issue
Block a user