Skip to content

Commit 2c94d88

Browse files
author
Yuanfang Chen
committed
[NewPM] collapsing nested pass mangers of the same type
This is one of the reason for extra invalidations in D84959. In practice, I don't think we have use cases needing this. This simplifies the pipeline a bit and prune corner cases when considering invalidations. Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D85676
1 parent 83cc498 commit 2c94d88

11 files changed

+15
-65
lines changed

clang/test/CodeGen/thinlto-distributed-newpm.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
; CHECK-O: Running pass: LowerTypeTestsPass
2626
; CHECK-O: Invalidating analysis: InnerAnalysisManagerProxy
2727
; CHECK-O: Running pass: ForceFunctionAttrsPass
28-
; CHECK-O: Starting {{.*}}Module pass manager run.
2928
; CHECK-O: Running pass: PGOIndirectCallPromotion
3029
; CHECK-O: Running analysis: ProfileSummaryAnalysis
3130
; CHECK-O: Running analysis: InnerAnalysisManagerProxy
@@ -151,8 +150,6 @@
151150
; CHECK-O: Invalidating analysis: DemandedBitsAnalysis on main
152151
; CHECK-O: Invalidating analysis: PostDominatorTreeAnalysis on main
153152
; CHECK-O: Invalidating analysis: CallGraphAnalysis
154-
; CHECK-O: Finished {{.*}}Module pass manager run.
155-
; CHECK-O: Starting {{.*}}Module pass manager run.
156153
; CHECK-O: Running pass: GlobalOptPass
157154
; CHECK-O: Running pass: GlobalDCEPass
158155
; CHECK-O: Running pass: EliminateAvailableExternallyPass
@@ -207,7 +204,6 @@
207204
; CHECK-O: Running pass: GlobalDCEPass
208205
; CHECK-O: Running pass: ConstantMergePass
209206
; CHECK-O: Finished {{.*}}Module pass manager run.
210-
; CHECK-O: Finished {{.*}}Module pass manager run.
211207

212208
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
213209
target triple = "x86_64-grtev4-linux-gnu"

llvm/include/llvm/IR/PassManager.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -548,14 +548,28 @@ class PassManager : public PassInfoMixin<
548548
return PA;
549549
}
550550

551-
template <typename PassT> void addPass(PassT Pass) {
551+
template <typename PassT>
552+
std::enable_if_t<!std::is_same<PassT, PassManager>::value>
553+
addPass(PassT Pass) {
552554
using PassModelT =
553555
detail::PassModel<IRUnitT, PassT, PreservedAnalyses, AnalysisManagerT,
554556
ExtraArgTs...>;
555557

556558
Passes.emplace_back(new PassModelT(std::move(Pass)));
557559
}
558560

561+
/// When adding a pass manager pass that has the same type as this pass
562+
/// manager, simply move the passes over. This is because we don't have use
563+
/// cases rely on executing nested pass managers. Doing this could reduce
564+
/// implementation complexity and avoid potential invalidation issues that may
565+
/// happen with nested pass managers of the same type.
566+
template <typename PassT>
567+
std::enable_if_t<std::is_same<PassT, PassManager>::value>
568+
addPass(PassT &&Pass) {
569+
for (auto &P : Pass.Passes)
570+
Passes.emplace_back(std::move(P));
571+
}
572+
559573
static bool isRequired() { return true; }
560574

561575
protected:

llvm/test/Other/new-pass-manager.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@
207207
; CHECK-INVALIDATE-ALL: Starting llvm::Module pass manager run
208208
; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
209209
; CHECK-INVALIDATE-ALL: Running analysis: NoOpModuleAnalysis
210-
; CHECK-INVALIDATE-ALL: Starting llvm::Module pass manager run
211210
; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
212211
; CHECK-INVALIDATE-ALL-NOT: Running analysis: NoOpModuleAnalysis
213212
; CHECK-INVALIDATE-ALL: Starting llvm::Function pass manager run
@@ -221,7 +220,6 @@
221220
; CHECK-INVALIDATE-ALL: Invalidating analysis: NoOpModuleAnalysis
222221
; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
223222
; CHECK-INVALIDATE-ALL: Running analysis: NoOpModuleAnalysis
224-
; CHECK-INVALIDATE-ALL: Finished llvm::Module pass manager run
225223
; CHECK-INVALIDATE-ALL-NOT: Invalidating analysis: NoOpModuleAnalysis
226224
; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
227225
; CHECK-INVALIDATE-ALL-NOT: Running analysis: NoOpModuleAnalysis
@@ -233,7 +231,6 @@
233231
; CHECK-INVALIDATE-ALL-CG: Starting llvm::Module pass manager run
234232
; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
235233
; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpModuleAnalysis
236-
; CHECK-INVALIDATE-ALL-CG: Starting llvm::Module pass manager run
237234
; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
238235
; CHECK-INVALIDATE-ALL-CG-NOT: Running analysis: NoOpModuleAnalysis
239236
; CHECK-INVALIDATE-ALL-CG: Starting CGSCC pass manager run
@@ -256,7 +253,6 @@
256253
; CHECK-INVALIDATE-ALL-CG: Invalidating analysis: NoOpModuleAnalysis
257254
; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
258255
; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpModuleAnalysis
259-
; CHECK-INVALIDATE-ALL-CG: Finished llvm::Module pass manager run
260256
; CHECK-INVALIDATE-ALL-CG-NOT: Invalidating analysis: NoOpModuleAnalysis
261257
; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
262258
; CHECK-INVALIDATE-ALL-CG-NOT: Running analysis: NoOpModuleAnalysis

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,8 @@
8989
; RUN: --check-prefix=CHECK-EP-OPTIMIZER-LAST --check-prefix=CHECK-O23SZ
9090

9191
; CHECK-O: Starting llvm::Module pass manager run.
92-
; CHECK-O-NEXT: Starting llvm::Module pass manager run.
9392
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
9493
; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass
95-
; CHECK-O-NEXT: Starting llvm::Module pass manager run.
9694
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
9795
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
9896
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
@@ -220,8 +218,6 @@
220218
; CHECK-EP-CGSCC-LATE-NEXT: Running pass: NoOpCGSCCPass
221219
; CHECK-O-NEXT: Finished CGSCC pass manager run.
222220
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
223-
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
224-
; CHECK-O-NEXT: Starting llvm::Module pass manager run.
225221
; CHECK-O-NEXT: Running pass: GlobalOptPass
226222
; CHECK-O-NEXT: Running pass: GlobalDCEPass
227223
; CHECK-O2-LTO-NOT: Running pass: EliminateAvailableExternallyPass
@@ -271,8 +267,6 @@
271267
; CHECK-O-NEXT: Running pass: CGProfilePass
272268
; CHECK-O-NEXT: Running pass: GlobalDCEPass
273269
; CHECK-O-NEXT: Running pass: ConstantMergePass
274-
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
275-
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
276270
; CHECK-O-NEXT: Running pass: PrintModulePass
277271
;
278272
; Make sure we get the IR back out without changes when we print the module.

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
; RUN: --check-prefix=CHECK-O3 --check-prefix=CHECK-EP-Peephole
2525

2626
; CHECK-O: Starting llvm::Module pass manager run.
27-
; CHECK-O-NEXT: Starting llvm::Module pass manager run.
2827
; CHECK-O-NEXT: Running pass: GlobalDCEPass
2928
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
3029
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
@@ -102,7 +101,6 @@
102101
; CHECK-O2-NEXT: Running pass: SimplifyCFGPass
103102
; CHECK-O2-NEXT: Running pass: EliminateAvailableExternallyPass
104103
; CHECK-O2-NEXT: Running pass: GlobalDCEPass
105-
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
106104
; CHECK-O-NEXT: Running pass: PrintModulePass
107105

108106
; Make sure we get the IR back out without changes when we print the module.

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,10 @@
4848
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-O23SZ,CHECK-POSTLINK-O,%llvmcheckext,CHECK-POSTLINK-O2
4949
;
5050
; CHECK-O: Starting llvm::Module pass manager run.
51-
; CHECK-O-NEXT: Starting llvm::Module pass manager run.
5251
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
5352
; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass
5453
; CHECK-DIS-NEXT: Running analysis: InnerAnalysisManagerProxy
5554
; CHECK-DIS-NEXT: Running pass: AddDiscriminatorsPass
56-
; CHECK-O-NEXT: Starting llvm::Module pass manager run.
5755
; CHECK-POSTLINK-O-NEXT: Running pass: PGOIndirectCallPromotion
5856
; CHECK-POSTLINK-O-NEXT: Running analysis: ProfileSummaryAnalysis
5957
; CHECK-POSTLINK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
@@ -190,9 +188,7 @@
190188
; CHECK-O-NEXT: Finished llvm::Function pass manager run.
191189
; CHECK-O-NEXT: Finished CGSCC pass manager run.
192190
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
193-
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
194191
; CHECK-PRELINK-O-NEXT: Running pass: GlobalOptPass
195-
; CHECK-POSTLINK-O-NEXT: Starting llvm::Module pass manager run.
196192
; CHECK-POSTLINK-O-NEXT: Running pass: GlobalOptPass
197193
; CHECK-POSTLINK-O-NEXT: Running pass: GlobalDCEPass
198194
; CHECK-POSTLINK-O-NEXT: Running pass: EliminateAvailableExternallyPass
@@ -240,8 +236,6 @@
240236
; CHECK-POSTLINK-O-NEXT: Running pass: CGProfilePass
241237
; CHECK-POSTLINK-O-NEXT: Running pass: GlobalDCEPass
242238
; CHECK-POSTLINK-O-NEXT: Running pass: ConstantMergePass
243-
; CHECK-POSTLINK-O-NEXT: Finished llvm::Module pass manager run.
244-
; CHECK-O-NEXT: Finished llvm::Module pass manager run.
245239
; CHECK-PRELINK-O-NEXT: Running pass: NameAnonGlobalPass
246240
; CHECK-O-NEXT: Running pass: PrintModulePass
247241

llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@
2121
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-O23SZ,%llvmcheckext --dump-input=fail
2222
;
2323
; CHECK-O: Starting {{.*}}Module pass manager run.
24-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
2524
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
2625
; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass
27-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
2826
; CHECK-O-NEXT: Running pass: PGOIndirectCallPromotion
2927
; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
3028
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
@@ -162,8 +160,6 @@
162160
; CHECK-O-NEXT: Finished {{.*}}Function pass manager run.
163161
; CHECK-O-NEXT: Finished CGSCC pass manager run.
164162
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
165-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
166-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
167163
; CHECK-O-NEXT: Running pass: GlobalOptPass
168164
; CHECK-O-NEXT: Running pass: GlobalDCEPass
169165
; CHECK-O-NEXT: Running pass: EliminateAvailableExternallyPass
@@ -209,8 +205,6 @@
209205
; CHECK-O-NEXT: Running pass: CGProfilePass
210206
; CHECK-O-NEXT: Running pass: GlobalDCEPass
211207
; CHECK-O-NEXT: Running pass: ConstantMergePass
212-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
213-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
214208
; CHECK-O-NEXT: Running pass: PrintModulePass
215209

216210
; Make sure we get the IR back out without changes when we print the module.

llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@
2626
; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-O23SZ,%llvmcheckext --dump-input=fail
2727
;
2828
; CHECK-O: Starting {{.*}}Module pass manager run.
29-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
3029
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
3130
; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass
32-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
3331
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
3432
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
3533
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
@@ -173,8 +171,6 @@
173171
; CHECK-O-NEXT: Finished {{.*}}Function pass manager run.
174172
; CHECK-O-NEXT: Finished CGSCC pass manager run.
175173
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
176-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
177-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
178174
; CHECK-O-NEXT: Running pass: GlobalOptPass
179175
; CHECK-O-NEXT: Running pass: GlobalDCEPass
180176
; CHECK-O-NEXT: Running pass: EliminateAvailableExternallyPass
@@ -220,8 +216,6 @@
220216
; CHECK-O-NEXT: Running pass: CGProfilePass
221217
; CHECK-O-NEXT: Running pass: GlobalDCEPass
222218
; CHECK-O-NEXT: Running pass: ConstantMergePass
223-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
224-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
225219
; CHECK-O-NEXT: Running pass: PrintModulePass
226220

227221
; Make sure we get the IR back out without changes when we print the module.

llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,8 @@
2828
; RUN: | FileCheck %s --check-prefixes=CHECK-DIS,CHECK-O,CHECK-O2,CHECK-O23SZ,CHECK-O123 --dump-input=fail
2929
;
3030
; CHECK-O: Starting {{.*}}Module pass manager run.
31-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
3231
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
3332
; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass
34-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
3533
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
3634
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
3735
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
@@ -215,27 +213,9 @@
215213
; CHECK-O-NEXT: Finished {{.*}}Function pass manager run.
216214
; CHECK-O-NEXT: Finished CGSCC pass manager run.
217215
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
218-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
219-
; CHECK-O23SZ-NEXT: Clearing all analysis results for: <possibly invalidated loop>
220-
; CHECK-O23SZ-NEXT: Invalidating analysis: DominatorTreeAnalysis
221-
; CHECK-O23SZ-NEXT: Invalidating analysis: MemorySSAAnalysis
222-
; CHECK-O23SZ-NEXT: Invalidating analysis: LoopAnalysis
223-
; CHECK-O23SZ-NEXT: Invalidating analysis: PostDominatorTreeAnalysis
224-
; CHECK-O23SZ-NEXT: Invalidating analysis: BranchProbabilityAnalysis
225-
; CHECK-O23SZ-NEXT: Invalidating analysis: BlockFrequencyAnalysis
226-
; CHECK-O23SZ-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
227-
; CHECK-O23SZ-NEXT: Invalidating analysis: InnerAnalysisManagerProxy
228-
; CHECK-O23SZ-NEXT: Invalidating analysis: PhiValuesAnalysis
229-
; CHECK-O23SZ-NEXT: Invalidating analysis: MemoryDependenceAnalysis
230-
; CHECK-O23SZ-NEXT: Invalidating analysis: DemandedBitsAnalysis
231-
; CHECK-O3-NEXT: Invalidating analysis: DominanceFrontierAnalysis
232-
; CHECK-O3-NEXT: Invalidating analysis: RegionInfoAnalysis
233-
; CHECK-O23SZ-NEXT: Clearing all analysis results for: foo
234216
; CHECK-O-NEXT: Running pass: GlobalOptPass
235217
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis on bar
236218
; CHECK-EXT: Running pass: {{.*}}::Bye
237-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
238-
; CHECK-O23SZ-NEXT: Clearing all analysis results for: foo
239219
; CHECK-O-NEXT: Running pass: NameAnonGlobalPass
240220
; CHECK-O-NEXT: Running pass: PrintModulePass
241221

llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@
2626
; RUN: | FileCheck %s --check-prefixes=CHECK-DIS,CHECK-O,CHECK-O2,CHECK-O23SZ,CHECK-O123 --dump-input=fail
2727
;
2828
; CHECK-O: Starting {{.*}}Module pass manager run.
29-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
3029
; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
3130
; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
3231
; CHECK-O-NEXT: Running pass: AddDiscriminatorsPass
3332
; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass
34-
; CHECK-O-NEXT: Starting {{.*}}Module pass manager run.
3533
; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
3634
; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
3735
; CHECK-O-NEXT: Starting {{.*}}Function pass manager run.
@@ -171,9 +169,7 @@
171169
; CHECK-O-NEXT: Finished {{.*}}Function pass manager run.
172170
; CHECK-O-NEXT: Finished CGSCC pass manager run.
173171
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
174-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
175172
; CHECK-O-NEXT: Running pass: GlobalOptPass
176-
; CHECK-O-NEXT: Finished {{.*}}Module pass manager run.
177173
; CHECK-O-NEXT: Running pass: NameAnonGlobalPass
178174
; CHECK-O-NEXT: Running pass: PrintModulePass
179175

0 commit comments

Comments
 (0)