Skip to content

Commit b9754e9

Browse files
authored
[LTO] Run Argument Promotion before IPSCCP (#111163)
Run ArgumentPromotion before IPSCCP in the LTO pipeline, to expose more constants to be propagated. We also run PostOrderFunctionAttrs to improve the information available to ArgumentPromotion's alias analysis, and SROA to clean up allocas.
1 parent 039e6f8 commit b9754e9

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

llvm/lib/Passes/PassBuilderPipelines.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1831,6 +1831,15 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
18311831
MPM.addPass(PGOIndirectCallPromotion(
18321832
true /* InLTO */, PGOOpt && PGOOpt->Action == PGOOptions::SampleUse));
18331833

1834+
// Promoting by-reference arguments to by-value exposes more constants to
1835+
// IPSCCP.
1836+
MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(
1837+
PostOrderFunctionAttrsPass(/*SkipNonRecursive*/ true)));
1838+
MPM.addPass(
1839+
createModuleToPostOrderCGSCCPassAdaptor(ArgumentPromotionPass()));
1840+
MPM.addPass(
1841+
createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::ModifyCFG)));
1842+
18341843
// Propagate constants at call sites into the functions they call. This
18351844
// opens opportunities for globalopt (and inlining) by substituting function
18361845
// pointers passed as arguments to direct uses of functions.

llvm/test/Other/new-pm-lto-defaults.ll

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,17 @@
4141
; CHECK-O23SZ-NEXT: PGOIndirectCallPromotion
4242
; CHECK-O23SZ-NEXT: Running analysis: ProfileSummaryAnalysis
4343
; CHECK-O23SZ-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
44-
; CHECK-O23SZ-NEXT: Running pass: IPSCCPPass
45-
; CHECK-O23SZ-NEXT: Running analysis: AssumptionAnalysis on foo
46-
; CHECK-O23SZ-NEXT: Running pass: CalledValuePropagationPass
4744
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}SCC
4845
; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
4946
; CHECK-O1-NEXT: Running analysis: TargetLibraryAnalysis
5047
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
5148
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}>
49+
; CHECK-O23SZ-NEXT: Running pass: PostOrderFunctionAttrsPass
50+
; CHECK-O23SZ-NEXT: Running pass: ArgumentPromotionPass
51+
; CHECK-O23SZ-NEXT: Running pass: SROAPass
52+
; CHECK-O23SZ-NEXT: Running analysis: AssumptionAnalysis on foo
53+
; CHECK-O23SZ-NEXT: Running pass: IPSCCPPass
54+
; CHECK-O23SZ-NEXT: Running pass: CalledValuePropagationPass
5255
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
5356
; CHECK-O-NEXT: Running analysis: AAManager
5457
; CHECK-O-NEXT: Running analysis: BasicAA

0 commit comments

Comments
 (0)