Skip to content

Commit 2af97be

Browse files
committed
[ThinLTO] Add additional ThinLTO pipeline testing with new PM
Summary: I've added some more extensive ThinLTO pipeline testing with the new PM, motivated by the bug fixed in D72386. I beefed up llvm/test/Other/new-pm-pgo.ll a little so that it tests ThinLTO pre and post link with PGO, similar to the testing for the default pipelines with PGO. Added new pre and post link PGO tests for both instrumentation and sample PGO that exhaustively test the pipelines at different optimization levels via opt. Added a clang test to exhaustively test the post link pipeline invoked for distributed builds. I am currently only testing O2 and O3 since these are the most important for performance. It would be nice to add similar exhaustive testing for full LTO, and for the old PM, but I don't have the bandwidth now and this is a start to cover some of the situations that are not currently default and were under tested. Reviewers: wmi Subscribers: mehdi_amini, inglorion, hiraditya, steven_wu, dexonsmith, jfb, cfe-commits, llvm-commits Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D72538
1 parent 07804f7 commit 2af97be

8 files changed

+1244
-0
lines changed
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
; REQUIRES: x86-registered-target
2+
3+
; Validate ThinLTO post link pipeline at O2 and O3
4+
5+
; RUN: opt -thinlto-bc -o %t.o %s
6+
7+
; RUN: llvm-lto2 run -thinlto-distributed-indexes %t.o \
8+
; RUN: -o %t2.index \
9+
; RUN: -r=%t.o,main,px
10+
11+
; RUN: %clang -target x86_64-grtev4-linux-gnu \
12+
; RUN: -O2 -fexperimental-new-pass-manager -Xclang -fdebug-pass-manager \
13+
; RUN: -c -fthinlto-index=%t.o.thinlto.bc \
14+
; RUN: -o %t.native.o -x ir %t.o 2>&1 | FileCheck -check-prefixes=CHECK-O,CHECK-O2 %s
15+
16+
; RUN: %clang -target x86_64-grtev4-linux-gnu \
17+
; RUN: -O3 -fexperimental-new-pass-manager -Xclang -fdebug-pass-manager \
18+
; RUN: -c -fthinlto-index=%t.o.thinlto.bc \
19+
; RUN: -o %t.native.o -x ir %t.o 2>&1 | FileCheck -check-prefixes=CHECK-O,CHECK-O3 %s
20+
21+
; CHECK-O: Running analysis: PassInstrumentationAnalysis
22+
; CHECK-O: Starting llvm::Module pass manager run.
23+
; CHECK-O: Running pass: WholeProgramDevirtPass
24+
; CHECK-O: Running analysis: InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager, llvm::Module>
25+
; CHECK-O: Running pass: LowerTypeTestsPass
26+
; CHECK-O: Invalidating all non-preserved analyses for:
27+
; CHECK-O: Invalidating analysis: InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager, llvm::Module>
28+
; CHECK-O: Running pass: ForceFunctionAttrsPass
29+
; CHECK-O: Running pass: PassManager<llvm::Module>
30+
; CHECK-O: Starting llvm::Module pass manager run.
31+
; CHECK-O: Running pass: PGOIndirectCallPromotion
32+
; CHECK-O: Running analysis: ProfileSummaryAnalysis
33+
; CHECK-O: Running analysis: InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager, llvm::Module>
34+
; CHECK-O: Running analysis: OptimizationRemarkEmitterAnalysis on main
35+
; CHECK-O: Running analysis: PassInstrumentationAnalysis on main
36+
; CHECK-O: Running pass: InferFunctionAttrsPass
37+
; CHECK-O: Running pass: ModuleToFunctionPassAdaptor<llvm::PassManager<llvm::Function> >
38+
; CHECK-O: Starting llvm::Function pass manager run.
39+
; CHECK-O: Running pass: SimplifyCFGPass on main
40+
; CHECK-O: Running analysis: TargetIRAnalysis on main
41+
; CHECK-O: Running analysis: AssumptionAnalysis on main
42+
; CHECK-O: Running pass: SROA on main
43+
; CHECK-O: Running analysis: DominatorTreeAnalysis on main
44+
; CHECK-O: Running pass: EarlyCSEPass on main
45+
; CHECK-O: Running analysis: TargetLibraryAnalysis on main
46+
; CHECK-O: Running pass: LowerExpectIntrinsicPass on main
47+
; CHECK-O3: Running pass: CallSiteSplittingPass on main
48+
; CHECK-O: Finished llvm::Function pass manager run.
49+
; CHECK-O: Running pass: IPSCCPPass
50+
; CHECK-O: Running pass: CalledValuePropagationPass
51+
; CHECK-O: Running pass: GlobalOptPass
52+
; CHECK-O: Invalidating all non-preserved analyses for:
53+
; CHECK-O: Invalidating analysis: InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager, llvm::Module>
54+
; CHECK-O: Running pass: ModuleToFunctionPassAdaptor<llvm::PromotePass>
55+
; CHECK-O: Running analysis: InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager, llvm::Module>
56+
; CHECK-O: Running analysis: DominatorTreeAnalysis on main
57+
; CHECK-O: Running analysis: PassInstrumentationAnalysis on main
58+
; CHECK-O: Running analysis: AssumptionAnalysis on main
59+
; CHECK-O: Running pass: DeadArgumentEliminationPass
60+
; CHECK-O: Running pass: ModuleToFunctionPassAdaptor<llvm::PassManager<llvm::Function> >
61+
; CHECK-O: Starting llvm::Function pass manager run.
62+
; CHECK-O: Running pass: InstCombinePass on main
63+
; CHECK-O: Running analysis: TargetLibraryAnalysis on main
64+
; CHECK-O: Running analysis: OptimizationRemarkEmitterAnalysis on main
65+
; CHECK-O: Running analysis: AAManager on main
66+
; CHECK-O: Running analysis: BasicAA on main
67+
; CHECK-O: Running analysis: ScopedNoAliasAA on main
68+
; CHECK-O: Running analysis: TypeBasedAA on main
69+
; CHECK-O: Running analysis: OuterAnalysisManagerProxy<llvm::ModuleAnalysisManager, llvm::Function> on main
70+
; CHECK-O: Running pass: SimplifyCFGPass on main
71+
; CHECK-O: Running analysis: TargetIRAnalysis on main
72+
; CHECK-O: Finished llvm::Function pass manager run.
73+
; CHECK-O: Running pass: RequireAnalysisPass<llvm::GlobalsAA, llvm::Module, llvm::AnalysisManager<llvm::Module>>
74+
; CHECK-O: Running analysis: GlobalsAA
75+
; CHECK-O: Running analysis: CallGraphAnalysis
76+
; CHECK-O: Running pass: RequireAnalysisPass<llvm::ProfileSummaryAnalysis, llvm::Module, llvm::AnalysisManager<llvm::Module>>
77+
; CHECK-O: Running pass: ModuleToPostOrderCGSCCPassAdaptor<llvm::DevirtSCCRepeatedPass<llvm::PassManager<LazyCallGraph::SCC, llvm::CGSCCAnalysisManager, llvm::LazyCallGraph &, llvm::CGSCCUpdateResult &> > >
78+
; CHECK-O: Running analysis: InnerAnalysisManagerProxy<llvm::CGSCCAnalysisManager, llvm::Module>
79+
; CHECK-O: Running analysis: LazyCallGraphAnalysis
80+
; CHECK-O: Running analysis: FunctionAnalysisManagerCGSCCProxy on (main)
81+
; CHECK-O: Running analysis: PassInstrumentationAnalysis on (main)
82+
; CHECK-O: Running analysis: OuterAnalysisManagerProxy<llvm::ModuleAnalysisManager, LazyCallGraph::SCC, llvm::LazyCallGraph &> on (main)
83+
; CHECK-O: Starting CGSCC pass manager run.
84+
; CHECK-O: Running pass: InlinerPass on (main)
85+
; CHECK-O: Running pass: PostOrderFunctionAttrsPass on (main)
86+
; CHECK-O: Invalidating all non-preserved analyses for: (main)
87+
; CHECK-O: Clearing all analysis results for: main
88+
; CHECK-O: Invalidating analysis: FunctionAnalysisManagerCGSCCProxy on (main)
89+
; CHECK-O3: Running pass: ArgumentPromotionPass on (main)
90+
; CHECK-O2: Running pass: CGSCCToFunctionPassAdaptor<llvm::PassManager<llvm::Function> > on (main)
91+
; CHECK-O: Running analysis: FunctionAnalysisManagerCGSCCProxy on (main)
92+
; CHECK-O3: Running analysis: TargetIRAnalysis on main
93+
; CHECK-O: Running analysis: PassInstrumentationAnalysis on main
94+
; CHECK-O3: Running pass: CGSCCToFunctionPassAdaptor<llvm::PassManager<llvm::Function> > on (main)
95+
; CHECK-O: Starting llvm::Function pass manager run.
96+
; CHECK-O: Running pass: SROA on main
97+
; CHECK-O: Running analysis: DominatorTreeAnalysis on main
98+
; CHECK-O: Running analysis: AssumptionAnalysis on main
99+
; CHECK-O: Running pass: EarlyCSEPass on main
100+
; CHECK-O: Running analysis: TargetLibraryAnalysis on main
101+
; CHECK-O2: Running analysis: TargetIRAnalysis on main
102+
; CHECK-O: Running analysis: MemorySSAAnalysis on main
103+
; CHECK-O: Running analysis: AAManager on main
104+
; CHECK-O: Running analysis: BasicAA on main
105+
; CHECK-O: Running analysis: ScopedNoAliasAA on main
106+
; CHECK-O: Running analysis: TypeBasedAA on main
107+
; CHECK-O: Running analysis: OuterAnalysisManagerProxy<llvm::ModuleAnalysisManager, llvm::Function> on main
108+
; CHECK-O: Running pass: SpeculativeExecutionPass on main
109+
; CHECK-O: Running pass: JumpThreadingPass on main
110+
; CHECK-O: Running analysis: LazyValueAnalysis on main
111+
; CHECK-O: Running pass: CorrelatedValuePropagationPass on main
112+
; CHECK-O: Running pass: SimplifyCFGPass on main
113+
; CHECK-O3: Running pass: AggressiveInstCombinePass on main
114+
; CHECK-O: Running pass: InstCombinePass on main
115+
; CHECK-O: Running analysis: OptimizationRemarkEmitterAnalysis on main
116+
; CHECK-O: Running pass: LibCallsShrinkWrapPass on main
117+
; CHECK-O: Running pass: TailCallElimPass on main
118+
; CHECK-O: Running pass: SimplifyCFGPass on main
119+
; CHECK-O: Running pass: ReassociatePass on main
120+
; CHECK-O: Running pass: RequireAnalysisPass<llvm::OptimizationRemarkEmitterAnalysis, llvm::Function, llvm::AnalysisManager<llvm::Function>> on main
121+
; CHECK-O: Running pass: FunctionToLoopPassAdaptor<llvm::PassManager<llvm::Loop, llvm::LoopAnalysisManager, llvm::LoopStandardAnalysisResults &, llvm::LPMUpdater &> > on main
122+
; CHECK-O: Starting llvm::Function pass manager run.
123+
; CHECK-O: Running pass: LoopSimplifyPass on main
124+
; CHECK-O: Running analysis: LoopAnalysis on main
125+
; CHECK-O: Running pass: LCSSAPass on main
126+
; CHECK-O: Finished llvm::Function pass manager run.
127+
; CHECK-O: Running pass: SimplifyCFGPass on main
128+
; CHECK-O: Running pass: InstCombinePass on main
129+
; CHECK-O: Running pass: FunctionToLoopPassAdaptor<llvm::PassManager<llvm::Loop, llvm::LoopAnalysisManager, llvm::LoopStandardAnalysisResults &, llvm::LPMUpdater &> > on main
130+
; CHECK-O: Starting llvm::Function pass manager run.
131+
; CHECK-O: Running pass: LoopSimplifyPass on main
132+
; CHECK-O: Running pass: LCSSAPass on main
133+
; CHECK-O: Finished llvm::Function pass manager run.
134+
; CHECK-O: Running pass: SROA on main
135+
; CHECK-O: Running pass: MergedLoadStoreMotionPass on main
136+
; CHECK-O: Running pass: GVN on main
137+
; CHECK-O: Running analysis: MemoryDependenceAnalysis on main
138+
; CHECK-O: Running analysis: PhiValuesAnalysis on main
139+
; CHECK-O: Running pass: MemCpyOptPass on main
140+
; CHECK-O: Running pass: SCCPPass on main
141+
; CHECK-O: Running pass: BDCEPass on main
142+
; CHECK-O: Running analysis: DemandedBitsAnalysis on main
143+
; CHECK-O: Running pass: InstCombinePass on main
144+
; CHECK-O: Running pass: JumpThreadingPass on main
145+
; CHECK-O: Running pass: CorrelatedValuePropagationPass on main
146+
; CHECK-O: Running pass: DSEPass on main
147+
; CHECK-O: Running pass: FunctionToLoopPassAdaptor<llvm::LICMPass> on main
148+
; CHECK-O: Starting llvm::Function pass manager run.
149+
; CHECK-O: Running pass: LoopSimplifyPass on main
150+
; CHECK-O: Running pass: LCSSAPass on main
151+
; CHECK-O: Finished llvm::Function pass manager run.
152+
; CHECK-O: Running pass: ADCEPass on main
153+
; CHECK-O: Running analysis: PostDominatorTreeAnalysis on main
154+
; CHECK-O: Running pass: SimplifyCFGPass on main
155+
; CHECK-O: Running pass: InstCombinePass on main
156+
; CHECK-O: Finished llvm::Function pass manager run.
157+
; CHECK-O: Finished CGSCC pass manager run.
158+
; CHECK-O: Invalidating all non-preserved analyses for:
159+
; CHECK-O: Invalidating all non-preserved analyses for: main
160+
; CHECK-O: Invalidating analysis: DominatorTreeAnalysis on main
161+
; CHECK-O: Invalidating analysis: BasicAA on main
162+
; CHECK-O: Invalidating analysis: AAManager on main
163+
; CHECK-O: Invalidating analysis: MemorySSAAnalysis on main
164+
; CHECK-O: Invalidating analysis: LazyValueAnalysis on main
165+
; CHECK-O: Invalidating analysis: LoopAnalysis on main
166+
; CHECK-O: Invalidating analysis: PhiValuesAnalysis on main
167+
; CHECK-O: Invalidating analysis: MemoryDependenceAnalysis on main
168+
; CHECK-O: Invalidating analysis: DemandedBitsAnalysis on main
169+
; CHECK-O: Invalidating analysis: PostDominatorTreeAnalysis on main
170+
; CHECK-O: Invalidating analysis: CallGraphAnalysis
171+
; CHECK-O: Invalidating analysis: GlobalsAA
172+
; CHECK-O: Finished llvm::Module pass manager run.
173+
; CHECK-O: Running pass: PassManager<llvm::Module>
174+
; CHECK-O: Starting llvm::Module pass manager run.
175+
; CHECK-O: Running pass: GlobalOptPass
176+
; CHECK-O: Running analysis: DominatorTreeAnalysis on main
177+
; CHECK-O: Running pass: GlobalDCEPass
178+
; CHECK-O: Running pass: EliminateAvailableExternallyPass
179+
; CHECK-O: Running pass: ReversePostOrderFunctionAttrsPass
180+
; CHECK-O: Running analysis: CallGraphAnalysis
181+
; CHECK-O: Running pass: RequireAnalysisPass<llvm::GlobalsAA, llvm::Module, llvm::AnalysisManager<llvm::Module>>
182+
; CHECK-O: Running analysis: GlobalsAA
183+
; CHECK-O: Running pass: ModuleToFunctionPassAdaptor<llvm::PassManager<llvm::Function> >
184+
; CHECK-O: Starting llvm::Function pass manager run.
185+
; CHECK-O: Running pass: Float2IntPass on main
186+
; CHECK-O: Running pass: LowerConstantIntrinsicsPass on main
187+
; CHECK-O: Running pass: FunctionToLoopPassAdaptor<llvm::LoopRotatePass> on main
188+
; CHECK-O: Starting llvm::Function pass manager run.
189+
; CHECK-O: Running pass: LoopSimplifyPass on main
190+
; CHECK-O: Running analysis: LoopAnalysis on main
191+
; CHECK-O: Running pass: LCSSAPass on main
192+
; CHECK-O: Finished llvm::Function pass manager run.
193+
; CHECK-O: Running pass: LoopDistributePass on main
194+
; CHECK-O: Running analysis: ScalarEvolutionAnalysis on main
195+
; CHECK-O: Running analysis: AAManager on main
196+
; CHECK-O: Running analysis: BasicAA on main
197+
; CHECK-O: Running analysis: InnerAnalysisManagerProxy<llvm::LoopAnalysisManager, llvm::Function> on main
198+
; CHECK-O: Running pass: LoopVectorizePass on main
199+
; CHECK-O: Running analysis: BlockFrequencyAnalysis on main
200+
; CHECK-O: Running analysis: BranchProbabilityAnalysis on main
201+
; CHECK-O: Running analysis: DemandedBitsAnalysis on main
202+
; CHECK-O: Running analysis: MemorySSAAnalysis on main
203+
; CHECK-O: Running pass: LoopLoadEliminationPass on main
204+
; CHECK-O: Running pass: InstCombinePass on main
205+
; CHECK-O: Running pass: SimplifyCFGPass on main
206+
; CHECK-O: Running pass: SLPVectorizerPass on main
207+
; CHECK-O: Running pass: InstCombinePass on main
208+
; CHECK-O: Running pass: LoopUnrollPass on main
209+
; CHECK-O: Running pass: WarnMissedTransformationsPass on main
210+
; CHECK-O: Running pass: InstCombinePass on main
211+
; CHECK-O: Running pass: RequireAnalysisPass<llvm::OptimizationRemarkEmitterAnalysis, llvm::Function, llvm::AnalysisManager<llvm::Function>> on main
212+
; CHECK-O: Running pass: FunctionToLoopPassAdaptor<llvm::LICMPass> on main
213+
; CHECK-O: Starting llvm::Function pass manager run.
214+
; CHECK-O: Running pass: LoopSimplifyPass on main
215+
; CHECK-O: Running pass: LCSSAPass on main
216+
; CHECK-O: Finished llvm::Function pass manager run.
217+
; CHECK-O: Running pass: AlignmentFromAssumptionsPass on main
218+
; CHECK-O: Running pass: LoopSinkPass on main
219+
; CHECK-O: Running pass: InstSimplifyPass on main
220+
; CHECK-O: Running pass: DivRemPairsPass on main
221+
; CHECK-O: Running pass: SimplifyCFGPass on main
222+
; CHECK-O: Running pass: SpeculateAroundPHIsPass on main
223+
; CHECK-O: Finished llvm::Function pass manager run.
224+
; CHECK-O: Running pass: CGProfilePass
225+
; CHECK-O: Running pass: GlobalDCEPass
226+
; CHECK-O: Running pass: ConstantMergePass
227+
; CHECK-O: Finished llvm::Module pass manager run.
228+
; CHECK-O: Finished llvm::Module pass manager run.
229+
230+
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
231+
target triple = "x86_64-grtev4-linux-gnu"
232+
233+
define i32 @main() {
234+
entry:
235+
ret i32 0
236+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
:ir
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
foo:0:0

llvm/test/Other/new-pm-pgo.ll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; RUN: opt -debug-pass-manager -passes='default<O2>' -pgo-kind=pgo-instr-gen-pipeline -profile-file='temp' %s 2>&1 |FileCheck %s --check-prefixes=GEN
22
; RUN: llvm-profdata merge %S/Inputs/new-pm-pgo.proftext -o %t.profdata
33
; RUN: opt -debug-pass-manager -passes='default<O2>' -pgo-kind=pgo-instr-use-pipeline -profile-file='%t.profdata' %s 2>&1 |FileCheck %s --check-prefixes=USE
4+
; RUN: opt -debug-pass-manager -passes='thinlto-pre-link<O2>' -pgo-kind=pgo-instr-use-pipeline -profile-file='%t.profdata' %s 2>&1 |FileCheck %s --check-prefixes=USE
5+
; RUN: opt -debug-pass-manager -passes='thinlto<O2>' -pgo-kind=pgo-instr-use-pipeline -profile-file='%t.profdata' %s 2>&1 |FileCheck %s --check-prefixes=USE_POST_LINK
46
; RUN: opt -debug-pass-manager -passes='default<O2>' -hot-cold-split -pgo-kind=pgo-instr-use-pipeline -profile-file='%t.profdata' %s 2>&1 |FileCheck %s --check-prefixes=USE --check-prefixes=SPLIT
57
; RUN: opt -debug-pass-manager -passes='default<O2>' -pgo-kind=pgo-sample-use-pipeline -profile-file='%S/Inputs/new-pm-pgo.prof' %s 2>&1 \
68
; RUN: |FileCheck %s --check-prefixes=SAMPLE_USE,SAMPLE_USE_O
@@ -14,6 +16,8 @@
1416
; USE: Running pass: PGOInstrumentationUse
1517
; USE: Running pass: PGOIndirectCallPromotion
1618
; USE: Running pass: PGOMemOPSizeOpt
19+
; USE_POST_LINK: Running pass: PGOIndirectCallPromotion
20+
; USE_POST_LINK: Running pass: PGOMemOPSizeOpt
1721
; SAMPLE_USE_O: Running pass: ModuleToFunctionPassAdaptor<{{.*}}AddDiscriminatorsPass{{.*}}>
1822
; SAMPLE_USE_PRE_LINK: Running pass: ModuleToFunctionPassAdaptor<{{.*}}AddDiscriminatorsPass{{.*}}>
1923
; SAMPLE_USE: Running pass: SimplifyCFGPass
@@ -25,6 +29,7 @@
2529
; SAMPLE_USE_O: Running pass: PGOIndirectCallPromotion
2630
; SAMPLE_USE_POST_LINK-NOT: Running pass: GlobalOptPass
2731
; SAMPLE_USE_POST_LINK: Running pass: PGOIndirectCallPromotion
32+
; SAMPLE_USE_PRE_LINK-NOT: Running pass: PGOIndirectCallPromotion
2833
; SAMPLE_GEN: Running pass: ModuleToFunctionPassAdaptor<{{.*}}AddDiscriminatorsPass{{.*}}>
2934
; SPLIT: Running pass: HotColdSplittingPass
3035

0 commit comments

Comments
 (0)