Skip to content

Commit e3fa578

Browse files
committed
[Passes] Manage extra passes using inner pass managers (NFC).
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.
1 parent e983420 commit e3fa578

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,19 @@ 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
}
@@ -69,12 +77,20 @@ struct ExtraFunctionPassManager : public FunctionPassManager {
6977
/// present. This allows passes to request additional transformations on demand.
7078
/// An example is doing additional runs of SimpleLoopUnswitch.
7179
template <typename MarkerTy>
72-
struct ExtraLoopPassManager : public LoopPassManager {
80+
class ExtraLoopPassManager
81+
: public PassInfoMixin<ExtraLoopPassManager<MarkerTy>> {
82+
LoopPassManager InnerLPM;
83+
84+
public:
85+
template <typename PassT> void addPass(PassT &&Pass) {
86+
InnerLPM.addPass(std::move(Pass));
87+
}
88+
7389
PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
7490
LoopStandardAnalysisResults &AR, LPMUpdater &U) {
7591
auto PA = PreservedAnalyses::all();
7692
if (AM.getCachedResult<MarkerTy>(L))
77-
PA.intersect(LoopPassManager::run(L, AM, AR, U));
93+
PA.intersect(InnerLPM.run(L, AM, AR, U));
7894
PA.abandon<MarkerTy>();
7995
return PA;
8096
}

0 commit comments

Comments
 (0)