Skip to content

Commit 62fcd45

Browse files
authored
[Passes] Manage extra passes using inner pass managers (NFC). (#119348)
As suggested post-commit for #118323, adjust the extra pass managers to no inherit from Function/LoopPassManager, but manage the extra passes via member pass managers. PR: #119348
1 parent 3c464d2 commit 62fcd45

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

llvm/include/llvm/Transforms/Utils/ExtraPassManager.h

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,29 +55,49 @@ template <typename MarkerTy> struct ShouldRunExtraPasses {
5555
/// request additional transformations on demand. An example is extra
5656
/// simplifications after loop-vectorization, if runtime checks have been added.
5757
template <typename MarkerTy>
58-
struct ExtraFunctionPassManager : public FunctionPassManager {
58+
class ExtraFunctionPassManager
59+
: public PassInfoMixin<ExtraFunctionPassManager<MarkerTy>> {
60+
FunctionPassManager InnerFPM;
61+
62+
public:
63+
template <typename PassT> void addPass(PassT &&Pass) {
64+
InnerFPM.addPass(std::move(Pass));
65+
}
66+
5967
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM) {
6068
auto PA = PreservedAnalyses::all();
6169
if (AM.getCachedResult<MarkerTy>(F))
62-
PA.intersect(FunctionPassManager::run(F, AM));
70+
PA.intersect(InnerFPM.run(F, AM));
6371
PA.abandon<MarkerTy>();
6472
return PA;
6573
}
74+
75+
static bool isRequired() { return true; }
6676
};
6777

6878
/// A pass manager to run a set of extra loop passes if the MarkerTy analysis is
6979
/// present. This allows passes to request additional transformations on demand.
7080
/// An example is doing additional runs of SimpleLoopUnswitch.
7181
template <typename MarkerTy>
72-
struct ExtraLoopPassManager : public LoopPassManager {
82+
class ExtraLoopPassManager
83+
: public PassInfoMixin<ExtraLoopPassManager<MarkerTy>> {
84+
LoopPassManager InnerLPM;
85+
86+
public:
87+
template <typename PassT> void addPass(PassT &&Pass) {
88+
InnerLPM.addPass(std::move(Pass));
89+
}
90+
7391
PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
7492
LoopStandardAnalysisResults &AR, LPMUpdater &U) {
7593
auto PA = PreservedAnalyses::all();
7694
if (AM.getCachedResult<MarkerTy>(L))
77-
PA.intersect(LoopPassManager::run(L, AM, AR, U));
95+
PA.intersect(InnerLPM.run(L, AM, AR, U));
7896
PA.abandon<MarkerTy>();
7997
return PA;
8098
}
99+
100+
static bool isRequired() { return true; }
81101
};
82102

83103
} // namespace llvm

llvm/lib/Passes/PassRegistry.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,8 @@ FUNCTION_PASS("dwarf-eh-prepare", DwarfEHPreparePass(TM))
366366
FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass(TM))
367367
FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass(TM))
368368
FUNCTION_PASS("expand-memcmp", ExpandMemCmpPass(TM))
369+
FUNCTION_PASS("extra-vector-passes",
370+
ExtraFunctionPassManager<ShouldRunExtraVectorPasses>())
369371
FUNCTION_PASS("fix-irreducible", FixIrreduciblePass())
370372
FUNCTION_PASS("flatten-cfg", FlattenCFGPass())
371373
FUNCTION_PASS("float2int", Float2IntPass())
@@ -651,6 +653,8 @@ LOOP_ANALYSIS("should-run-extra-simple-loop-unswitch",
651653
LOOP_PASS("canon-freeze", CanonicalizeFreezeInLoopsPass())
652654
LOOP_PASS("dot-ddg", DDGDotPrinterPass())
653655
LOOP_PASS("guard-widening", GuardWideningPass())
656+
LOOP_PASS("extra-simple-loop-unswitch-passes",
657+
ExtraLoopPassManager<ShouldRunExtraSimpleLoopUnswitch>())
654658
LOOP_PASS("indvars", IndVarSimplifyPass())
655659
LOOP_PASS("invalidate<all>", InvalidateAllAnalysesPass())
656660
LOOP_PASS("loop-bound-split", LoopBoundSplitPass())

0 commit comments

Comments
 (0)