Skip to content

Commit 8039d2c

Browse files
committed
[NFC] Derive from PassInfoMixin for no-op/printing passes
PassInfoMixin should be used for all NPM passes, rater than a custom `name()`. This caused ambiguous references in LegacyPassManager.cpp, so had to remove "using namespace llvm::legacy" and move some things around. The passes had to be moved to the llvm namespace, or else they would get printed as "(anonymous namespace)::FooPass". Reviewed By: ychen, asbirlea Differential Revision: https://reviews.llvm.org/D83498
1 parent e296e9d commit 8039d2c

File tree

3 files changed

+119
-115
lines changed

3 files changed

+119
-115
lines changed

llvm/include/llvm/IR/IRPrintingPasses.h

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,10 @@
1919
#define LLVM_IR_IRPRINTINGPASSES_H
2020

2121
#include "llvm/ADT/StringRef.h"
22+
#include "llvm/IR/PassManager.h"
2223
#include <string>
2324

2425
namespace llvm {
25-
class Pass;
26-
class Function;
27-
class FunctionPass;
28-
class Module;
29-
class ModulePass;
30-
class PreservedAnalyses;
31-
class raw_ostream;
32-
template <typename IRUnitT, typename... ExtraArgTs> class AnalysisManager;
3326

3427
/// Create and return a pass that writes the module to the specified
3528
/// \c raw_ostream.
@@ -71,7 +64,7 @@ extern bool shouldPrintAfterPass(StringRef);
7164
///
7265
/// Note: This pass is for use with the new pass manager. Use the create...Pass
7366
/// functions above to create passes for use with the legacy pass manager.
74-
class PrintModulePass {
67+
class PrintModulePass : public PassInfoMixin<PrintModulePass> {
7568
raw_ostream &OS;
7669
std::string Banner;
7770
bool ShouldPreserveUseListOrder;
@@ -82,15 +75,13 @@ class PrintModulePass {
8275
bool ShouldPreserveUseListOrder = false);
8376

8477
PreservedAnalyses run(Module &M, AnalysisManager<Module> &);
85-
86-
static StringRef name() { return "PrintModulePass"; }
8778
};
8879

8980
/// Pass for printing a Function as LLVM's text IR assembly.
9081
///
9182
/// Note: This pass is for use with the new pass manager. Use the create...Pass
9283
/// functions above to create passes for use with the legacy pass manager.
93-
class PrintFunctionPass {
84+
class PrintFunctionPass : public PassInfoMixin<PrintFunctionPass> {
9485
raw_ostream &OS;
9586
std::string Banner;
9687

@@ -99,8 +90,6 @@ class PrintFunctionPass {
9990
PrintFunctionPass(raw_ostream &OS, const std::string &Banner = "");
10091

10192
PreservedAnalyses run(Function &F, AnalysisManager<Function> &);
102-
103-
static StringRef name() { return "PrintFunctionPass"; }
10493
};
10594

10695
} // End llvm namespace

llvm/lib/IR/LegacyPassManager.cpp

Lines changed: 106 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include <algorithm>
3434
#include <unordered_set>
3535
using namespace llvm;
36-
using namespace llvm::legacy;
3736

3837
// See PassManagers.h for Pass Manager infrastructure overview.
3938

@@ -387,6 +386,66 @@ class FunctionPassManagerImpl : public Pass,
387386
void FunctionPassManagerImpl::anchor() {}
388387

389388
char FunctionPassManagerImpl::ID = 0;
389+
390+
//===----------------------------------------------------------------------===//
391+
// FunctionPassManagerImpl implementation
392+
//
393+
bool FunctionPassManagerImpl::doInitialization(Module &M) {
394+
bool Changed = false;
395+
396+
dumpArguments();
397+
dumpPasses();
398+
399+
for (ImmutablePass *ImPass : getImmutablePasses())
400+
Changed |= ImPass->doInitialization(M);
401+
402+
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index)
403+
Changed |= getContainedManager(Index)->doInitialization(M);
404+
405+
return Changed;
406+
}
407+
408+
bool FunctionPassManagerImpl::doFinalization(Module &M) {
409+
bool Changed = false;
410+
411+
for (int Index = getNumContainedManagers() - 1; Index >= 0; --Index)
412+
Changed |= getContainedManager(Index)->doFinalization(M);
413+
414+
for (ImmutablePass *ImPass : getImmutablePasses())
415+
Changed |= ImPass->doFinalization(M);
416+
417+
return Changed;
418+
}
419+
420+
void FunctionPassManagerImpl::releaseMemoryOnTheFly() {
421+
if (!wasRun)
422+
return;
423+
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
424+
FPPassManager *FPPM = getContainedManager(Index);
425+
for (unsigned Index = 0; Index < FPPM->getNumContainedPasses(); ++Index) {
426+
FPPM->getContainedPass(Index)->releaseMemory();
427+
}
428+
}
429+
wasRun = false;
430+
}
431+
432+
// Execute all the passes managed by this top level manager.
433+
// Return true if any function is modified by a pass.
434+
bool FunctionPassManagerImpl::run(Function &F) {
435+
bool Changed = false;
436+
437+
initializeAllAnalysisInfo();
438+
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
439+
Changed |= getContainedManager(Index)->runOnFunction(F);
440+
F.getContext().yield();
441+
}
442+
443+
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index)
444+
getContainedManager(Index)->cleanup();
445+
446+
wasRun = true;
447+
return Changed;
448+
}
390449
} // namespace legacy
391450
} // namespace llvm
392451

@@ -406,7 +465,7 @@ class MPPassManager : public Pass, public PMDataManager {
406465
// Delete on the fly managers.
407466
~MPPassManager() override {
408467
for (auto &OnTheFlyManager : OnTheFlyManagers) {
409-
FunctionPassManagerImpl *FPP = OnTheFlyManager.second;
468+
legacy::FunctionPassManagerImpl *FPP = OnTheFlyManager.second;
410469
delete FPP;
411470
}
412471
}
@@ -451,7 +510,7 @@ class MPPassManager : public Pass, public PMDataManager {
451510
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
452511
ModulePass *MP = getContainedPass(Index);
453512
MP->dumpPassStructure(Offset + 1);
454-
MapVector<Pass *, FunctionPassManagerImpl *>::const_iterator I =
513+
MapVector<Pass *, legacy::FunctionPassManagerImpl *>::const_iterator I =
455514
OnTheFlyManagers.find(MP);
456515
if (I != OnTheFlyManagers.end())
457516
I->second->dumpPassStructure(Offset + 2);
@@ -471,7 +530,7 @@ class MPPassManager : public Pass, public PMDataManager {
471530
private:
472531
/// Collection of on the fly FPPassManagers. These managers manage
473532
/// function passes that are required by module passes.
474-
MapVector<Pass *, FunctionPassManagerImpl *> OnTheFlyManagers;
533+
MapVector<Pass *, legacy::FunctionPassManagerImpl *> OnTheFlyManagers;
475534
};
476535

477536
char MPPassManager::ID = 0;
@@ -534,6 +593,33 @@ class PassManagerImpl : public Pass,
534593
void PassManagerImpl::anchor() {}
535594

536595
char PassManagerImpl::ID = 0;
596+
597+
//===----------------------------------------------------------------------===//
598+
// PassManagerImpl implementation
599+
600+
//
601+
/// run - Execute all of the passes scheduled for execution. Keep track of
602+
/// whether any of the passes modifies the module, and if so, return true.
603+
bool PassManagerImpl::run(Module &M) {
604+
bool Changed = false;
605+
606+
dumpArguments();
607+
dumpPasses();
608+
609+
for (ImmutablePass *ImPass : getImmutablePasses())
610+
Changed |= ImPass->doInitialization(M);
611+
612+
initializeAllAnalysisInfo();
613+
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
614+
Changed |= getContainedManager(Index)->runOnModule(M);
615+
M.getContext().yield();
616+
}
617+
618+
for (ImmutablePass *ImPass : getImmutablePasses())
619+
Changed |= ImPass->doFinalization(M);
620+
621+
return Changed;
622+
}
537623
} // namespace legacy
538624
} // namespace llvm
539625

@@ -1314,12 +1400,15 @@ AnalysisResolver::findImplPass(Pass *P, AnalysisID AnalysisPI, Function &F) {
13141400
return PM.getOnTheFlyPass(P, AnalysisPI, F);
13151401
}
13161402

1403+
namespace llvm {
1404+
namespace legacy {
1405+
13171406
//===----------------------------------------------------------------------===//
13181407
// FunctionPassManager implementation
13191408

13201409
/// Create new Function pass manager
13211410
FunctionPassManager::FunctionPassManager(Module *m) : M(m) {
1322-
FPM = new FunctionPassManagerImpl();
1411+
FPM = new legacy::FunctionPassManagerImpl();
13231412
// FPM is the top level manager.
13241413
FPM->setTopLevelManager(FPM);
13251414

@@ -1358,36 +1447,8 @@ bool FunctionPassManager::doInitialization() {
13581447
bool FunctionPassManager::doFinalization() {
13591448
return FPM->doFinalization(*M);
13601449
}
1361-
1362-
//===----------------------------------------------------------------------===//
1363-
// FunctionPassManagerImpl implementation
1364-
//
1365-
bool FunctionPassManagerImpl::doInitialization(Module &M) {
1366-
bool Changed = false;
1367-
1368-
dumpArguments();
1369-
dumpPasses();
1370-
1371-
for (ImmutablePass *ImPass : getImmutablePasses())
1372-
Changed |= ImPass->doInitialization(M);
1373-
1374-
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index)
1375-
Changed |= getContainedManager(Index)->doInitialization(M);
1376-
1377-
return Changed;
1378-
}
1379-
1380-
bool FunctionPassManagerImpl::doFinalization(Module &M) {
1381-
bool Changed = false;
1382-
1383-
for (int Index = getNumContainedManagers() - 1; Index >= 0; --Index)
1384-
Changed |= getContainedManager(Index)->doFinalization(M);
1385-
1386-
for (ImmutablePass *ImPass : getImmutablePasses())
1387-
Changed |= ImPass->doFinalization(M);
1388-
1389-
return Changed;
1390-
}
1450+
} // namespace legacy
1451+
} // namespace llvm
13911452

13921453
/// cleanup - After running all passes, clean up pass manager cache.
13931454
void FPPassManager::cleanup() {
@@ -1399,35 +1460,6 @@ void FPPassManager::cleanup() {
13991460
}
14001461
}
14011462

1402-
void FunctionPassManagerImpl::releaseMemoryOnTheFly() {
1403-
if (!wasRun)
1404-
return;
1405-
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
1406-
FPPassManager *FPPM = getContainedManager(Index);
1407-
for (unsigned Index = 0; Index < FPPM->getNumContainedPasses(); ++Index) {
1408-
FPPM->getContainedPass(Index)->releaseMemory();
1409-
}
1410-
}
1411-
wasRun = false;
1412-
}
1413-
1414-
// Execute all the passes managed by this top level manager.
1415-
// Return true if any function is modified by a pass.
1416-
bool FunctionPassManagerImpl::run(Function &F) {
1417-
bool Changed = false;
1418-
1419-
initializeAllAnalysisInfo();
1420-
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
1421-
Changed |= getContainedManager(Index)->runOnFunction(F);
1422-
F.getContext().yield();
1423-
}
1424-
1425-
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index)
1426-
getContainedManager(Index)->cleanup();
1427-
1428-
wasRun = true;
1429-
return Changed;
1430-
}
14311463

14321464
//===----------------------------------------------------------------------===//
14331465
// FPPassManager implementation
@@ -1554,7 +1586,7 @@ MPPassManager::runOnModule(Module &M) {
15541586

15551587
// Initialize on-the-fly passes
15561588
for (auto &OnTheFlyManager : OnTheFlyManagers) {
1557-
FunctionPassManagerImpl *FPP = OnTheFlyManager.second;
1589+
legacy::FunctionPassManagerImpl *FPP = OnTheFlyManager.second;
15581590
Changed |= FPP->doInitialization(M);
15591591
}
15601592

@@ -1615,7 +1647,7 @@ MPPassManager::runOnModule(Module &M) {
16151647

16161648
// Finalize on-the-fly passes
16171649
for (auto &OnTheFlyManager : OnTheFlyManagers) {
1618-
FunctionPassManagerImpl *FPP = OnTheFlyManager.second;
1650+
legacy::FunctionPassManagerImpl *FPP = OnTheFlyManager.second;
16191651
// We don't know when is the last time an on-the-fly pass is run,
16201652
// so we need to releaseMemory / finalize here
16211653
FPP->releaseMemoryOnTheFly();
@@ -1636,9 +1668,9 @@ void MPPassManager::addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass) {
16361668
RequiredPass->getPotentialPassManagerType()) &&
16371669
"Unable to handle Pass that requires lower level Analysis pass");
16381670

1639-
FunctionPassManagerImpl *FPP = OnTheFlyManagers[P];
1671+
legacy::FunctionPassManagerImpl *FPP = OnTheFlyManagers[P];
16401672
if (!FPP) {
1641-
FPP = new FunctionPassManagerImpl();
1673+
FPP = new legacy::FunctionPassManagerImpl();
16421674
// FPP is the top level manager.
16431675
FPP->setTopLevelManager(FPP);
16441676

@@ -1669,7 +1701,7 @@ void MPPassManager::addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass) {
16691701
/// its runOnFunction() for function F.
16701702
std::tuple<Pass *, bool> MPPassManager::getOnTheFlyPass(Pass *MP, AnalysisID PI,
16711703
Function &F) {
1672-
FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP];
1704+
legacy::FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP];
16731705
assert(FPP && "Unable to find on the fly pass");
16741706

16751707
FPP->releaseMemoryOnTheFly();
@@ -1678,32 +1710,8 @@ std::tuple<Pass *, bool> MPPassManager::getOnTheFlyPass(Pass *MP, AnalysisID PI,
16781710
Changed);
16791711
}
16801712

1681-
//===----------------------------------------------------------------------===//
1682-
// PassManagerImpl implementation
1683-
1684-
//
1685-
/// run - Execute all of the passes scheduled for execution. Keep track of
1686-
/// whether any of the passes modifies the module, and if so, return true.
1687-
bool PassManagerImpl::run(Module &M) {
1688-
bool Changed = false;
1689-
1690-
dumpArguments();
1691-
dumpPasses();
1692-
1693-
for (ImmutablePass *ImPass : getImmutablePasses())
1694-
Changed |= ImPass->doInitialization(M);
1695-
1696-
initializeAllAnalysisInfo();
1697-
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
1698-
Changed |= getContainedManager(Index)->runOnModule(M);
1699-
M.getContext().yield();
1700-
}
1701-
1702-
for (ImmutablePass *ImPass : getImmutablePasses())
1703-
Changed |= ImPass->doFinalization(M);
1704-
1705-
return Changed;
1706-
}
1713+
namespace llvm {
1714+
namespace legacy {
17071715

17081716
//===----------------------------------------------------------------------===//
17091717
// PassManager implementation
@@ -1728,6 +1736,8 @@ void PassManager::add(Pass *P) {
17281736
bool PassManager::run(Module &M) {
17291737
return PM->run(M);
17301738
}
1739+
} // namespace legacy
1740+
} // namespace llvm
17311741

17321742
//===----------------------------------------------------------------------===//
17331743
// PMStack implementation
@@ -1818,4 +1828,4 @@ void FunctionPass::assignPassManager(PMStack &PMS,
18181828
PM->add(this);
18191829
}
18201830

1821-
PassManagerBase::~PassManagerBase() {}
1831+
legacy::PassManagerBase::~PassManagerBase() {}

0 commit comments

Comments
 (0)