[llvm-commits] [llvm] r66254 - /llvm/trunk/lib/VMCore/PassManager.cpp
Chris Lattner
sabre at nondot.org
Thu Mar 5 21:53:14 PST 2009
Author: lattner
Date: Thu Mar 5 23:53:14 2009
New Revision: 66254
URL: http://llvm.org/viewvc/llvm-project?rev=66254&view=rev
Log:
various cosmetic cleanups.
Modified:
llvm/trunk/lib/VMCore/PassManager.cpp
Modified: llvm/trunk/lib/VMCore/PassManager.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassManager.cpp?rev=66254&r1=66253&r2=66254&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/PassManager.cpp (original)
+++ llvm/trunk/lib/VMCore/PassManager.cpp Thu Mar 5 23:53:14 2009
@@ -105,7 +105,7 @@
}
BasicBlockPass *getContainedPass(unsigned N) {
- assert ( N < PassVector.size() && "Pass number out of range!");
+ assert(N < PassVector.size() && "Pass number out of range!");
BasicBlockPass *BP = static_cast<BasicBlockPass *>(PassVector[N]);
return BP;
}
@@ -176,7 +176,7 @@
}
FPPassManager *getContainedManager(unsigned N) {
- assert ( N < PassManagers.size() && "Pass number out of range!");
+ assert(N < PassManagers.size() && "Pass number out of range!");
FPPassManager *FP = static_cast<FPPassManager *>(PassManagers[N]);
return FP;
}
@@ -190,7 +190,6 @@
/// It batches all Module passes and function pass managers together and
/// sequences them to process one module.
class MPPassManager : public Pass, public PMDataManager {
-
public:
static char ID;
explicit MPPassManager(int Depth) :
@@ -242,9 +241,8 @@
}
ModulePass *getContainedPass(unsigned N) {
- assert ( N < PassVector.size() && "Pass number out of range!");
- ModulePass *MP = static_cast<ModulePass *>(PassVector[N]);
- return MP;
+ assert(N < PassVector.size() && "Pass number out of range!");
+ return static_cast<ModulePass *>(PassVector[N]);
}
virtual PassManagerType getPassManagerType() const {
@@ -307,7 +305,7 @@
}
MPPassManager *getContainedManager(unsigned N) {
- assert ( N < PassManagers.size() && "Pass number out of range!");
+ assert(N < PassManagers.size() && "Pass number out of range!");
MPPassManager *MP = static_cast<MPPassManager *>(PassManagers[N]);
return MP;
}
@@ -361,7 +359,7 @@
return;
std::map<Pass*, Timer>::iterator I = TimingData.find(P);
- assert (I != TimingData.end() && "passStarted/passEnded not nested right!");
+ assert(I != TimingData.end() && "passStarted/passEnded not nested right!");
I->second.stopTimer();
}
};
@@ -514,7 +512,8 @@
}
// Check other pass managers
- for (SmallVector<PMDataManager *, 8>::iterator I = IndirectPassManagers.begin(),
+ for (SmallVector<PMDataManager *, 8>::iterator
+ I = IndirectPassManagers.begin(),
E = IndirectPassManagers.end(); P == NULL && I != E; ++I)
P = (*I)->findAnalysisPass(AID, false);
@@ -583,7 +582,7 @@
E = IndirectPassManagers.end(); I != E; ++I)
(*I)->initializeAnalysisInfo();
- for(DenseMap<Pass *, Pass *>::iterator DMI = LastUser.begin(),
+ for (DenseMap<Pass *, Pass *>::iterator DMI = LastUser.begin(),
DME = LastUser.end(); DMI != DME; ++DMI) {
DenseMap<Pass *, SmallPtrSet<Pass *, 8> >::iterator InvDMI =
InversedLastUser.find(DMI->second);
@@ -608,11 +607,8 @@
delete *I;
for (DenseMap<Pass *, AnalysisUsage *>::iterator DMI = AnUsageMap.begin(),
- DME = AnUsageMap.end(); DMI != DME; ++DMI) {
- AnalysisUsage *AU = DMI->second;
- delete AU;
- }
-
+ DME = AnUsageMap.end(); DMI != DME; ++DMI)
+ delete DMI->second;
}
//===----------------------------------------------------------------------===//
@@ -620,24 +616,22 @@
/// Augement AvailableAnalysis by adding analysis made available by pass P.
void PMDataManager::recordAvailableAnalysis(Pass *P) {
-
- if (const PassInfo *PI = P->getPassInfo()) {
- AvailableAnalysis[PI] = P;
-
- //This pass is the current implementation of all of the interfaces it
- //implements as well.
- const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
- for (unsigned i = 0, e = II.size(); i != e; ++i)
- AvailableAnalysis[II[i]] = P;
- }
+ const PassInfo *PI = P->getPassInfo();
+ if (PI == 0) return;
+
+ AvailableAnalysis[PI] = P;
+
+ //This pass is the current implementation of all of the interfaces it
+ //implements as well.
+ const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
+ for (unsigned i = 0, e = II.size(); i != e; ++i)
+ AvailableAnalysis[II[i]] = P;
}
// Return true if P preserves high level analysis used by other
// passes managed by this manager
bool PMDataManager::preserveHigherLevelAnalysis(Pass *P) {
-
AnalysisUsage *AnUsage = TPM->findAnalysisUsage(P);
-
if (AnUsage->getPreservesAll())
return true;
@@ -675,7 +669,6 @@
/// verifyDomInfo - Verify dominator information if it is available.
void PMDataManager::verifyDomInfo(Pass &P, Function &F) {
-
if (!VerifyDomInfo || !P.getResolver())
return;
@@ -692,7 +685,7 @@
OtherDT.dump();
cerr << "----- Invalid -----\n";
DT->dump();
- assert (0 && "Invalid dominator info");
+ assert(0 && "Invalid dominator info");
}
DominanceFrontier *DF = P.getAnalysisIfAvailable<DominanceFrontier>();
@@ -709,7 +702,7 @@
OtherDF.dump();
cerr << "----- Invalid -----\n";
DF->dump();
- assert (0 && "Invalid dominator info");
+ assert(0 && "Invalid dominator info");
}
}
@@ -804,9 +797,7 @@
/// Add pass P into the PassVector. Update
/// AvailableAnalysis appropriately if ProcessAnalysis is true.
-void PMDataManager::add(Pass *P,
- bool ProcessAnalysis) {
-
+void PMDataManager::add(Pass *P, bool ProcessAnalysis) {
// This manager is going to manage pass P. Set up analysis resolver
// to connect them.
AnalysisResolver *AR = new AnalysisResolver(*this);
@@ -816,64 +807,67 @@
// then the F's manager, not F, records itself as a last user of M.
SmallVector<Pass *, 12> TransferLastUses;
- if (ProcessAnalysis) {
-
- // At the moment, this pass is the last user of all required passes.
- SmallVector<Pass *, 12> LastUses;
- SmallVector<Pass *, 8> RequiredPasses;
- SmallVector<AnalysisID, 8> ReqAnalysisNotAvailable;
-
- unsigned PDepth = this->getDepth();
-
- collectRequiredAnalysis(RequiredPasses,
- ReqAnalysisNotAvailable, P);
- for (SmallVector<Pass *, 8>::iterator I = RequiredPasses.begin(),
- E = RequiredPasses.end(); I != E; ++I) {
- Pass *PRequired = *I;
- unsigned RDepth = 0;
-
- assert (PRequired->getResolver() && "Analysis Resolver is not set");
- PMDataManager &DM = PRequired->getResolver()->getPMDataManager();
- RDepth = DM.getDepth();
-
- if (PDepth == RDepth)
- LastUses.push_back(PRequired);
- else if (PDepth > RDepth) {
- // Let the parent claim responsibility of last use
- TransferLastUses.push_back(PRequired);
- // Keep track of higher level analysis used by this manager.
- HigherLevelAnalysis.push_back(PRequired);
- } else
- assert (0 && "Unable to accomodate Required Pass");
- }
-
- // Set P as P's last user until someone starts using P.
- // However, if P is a Pass Manager then it does not need
- // to record its last user.
- if (!dynamic_cast<PMDataManager *>(P))
- LastUses.push_back(P);
- TPM->setLastUser(LastUses, P);
-
- if (!TransferLastUses.empty()) {
- Pass *My_PM = dynamic_cast<Pass *>(this);
- TPM->setLastUser(TransferLastUses, My_PM);
- TransferLastUses.clear();
- }
-
- // Now, take care of required analysises that are not available.
- for (SmallVector<AnalysisID, 8>::iterator
- I = ReqAnalysisNotAvailable.begin(),
- E = ReqAnalysisNotAvailable.end() ;I != E; ++I) {
- Pass *AnalysisPass = (*I)->createPass();
- this->addLowerLevelRequiredPass(P, AnalysisPass);
- }
-
- // Take a note of analysis required and made available by this pass.
- // Remove the analysis not preserved by this pass
- removeNotPreservedAnalysis(P);
- recordAvailableAnalysis(P);
+ if (!ProcessAnalysis) {
+ // Add pass
+ PassVector.push_back(P);
+ return;
}
+ // At the moment, this pass is the last user of all required passes.
+ SmallVector<Pass *, 12> LastUses;
+ SmallVector<Pass *, 8> RequiredPasses;
+ SmallVector<AnalysisID, 8> ReqAnalysisNotAvailable;
+
+ unsigned PDepth = this->getDepth();
+
+ collectRequiredAnalysis(RequiredPasses,
+ ReqAnalysisNotAvailable, P);
+ for (SmallVector<Pass *, 8>::iterator I = RequiredPasses.begin(),
+ E = RequiredPasses.end(); I != E; ++I) {
+ Pass *PRequired = *I;
+ unsigned RDepth = 0;
+
+ assert(PRequired->getResolver() && "Analysis Resolver is not set");
+ PMDataManager &DM = PRequired->getResolver()->getPMDataManager();
+ RDepth = DM.getDepth();
+
+ if (PDepth == RDepth)
+ LastUses.push_back(PRequired);
+ else if (PDepth > RDepth) {
+ // Let the parent claim responsibility of last use
+ TransferLastUses.push_back(PRequired);
+ // Keep track of higher level analysis used by this manager.
+ HigherLevelAnalysis.push_back(PRequired);
+ } else
+ assert(0 && "Unable to accomodate Required Pass");
+ }
+
+ // Set P as P's last user until someone starts using P.
+ // However, if P is a Pass Manager then it does not need
+ // to record its last user.
+ if (!dynamic_cast<PMDataManager *>(P))
+ LastUses.push_back(P);
+ TPM->setLastUser(LastUses, P);
+
+ if (!TransferLastUses.empty()) {
+ Pass *My_PM = dynamic_cast<Pass *>(this);
+ TPM->setLastUser(TransferLastUses, My_PM);
+ TransferLastUses.clear();
+ }
+
+ // Now, take care of required analysises that are not available.
+ for (SmallVector<AnalysisID, 8>::iterator
+ I = ReqAnalysisNotAvailable.begin(),
+ E = ReqAnalysisNotAvailable.end() ;I != E; ++I) {
+ Pass *AnalysisPass = (*I)->createPass();
+ this->addLowerLevelRequiredPass(P, AnalysisPass);
+ }
+
+ // Take a note of analysis required and made available by this pass.
+ // Remove the analysis not preserved by this pass
+ removeNotPreservedAnalysis(P);
+ recordAvailableAnalysis(P);
+
// Add pass
PassVector.push_back(P);
}
@@ -888,23 +882,20 @@
AnalysisUsage *AnUsage = TPM->findAnalysisUsage(P);
const AnalysisUsage::VectorType &RequiredSet = AnUsage->getRequiredSet();
for (AnalysisUsage::VectorType::const_iterator
- I = RequiredSet.begin(), E = RequiredSet.end();
- I != E; ++I) {
- AnalysisID AID = *I;
+ I = RequiredSet.begin(), E = RequiredSet.end(); I != E; ++I) {
if (Pass *AnalysisPass = findAnalysisPass(*I, true))
RP.push_back(AnalysisPass);
else
- RP_NotAvail.push_back(AID);
+ RP_NotAvail.push_back(*I);
}
const AnalysisUsage::VectorType &IDs = AnUsage->getRequiredTransitiveSet();
for (AnalysisUsage::VectorType::const_iterator I = IDs.begin(),
E = IDs.end(); I != E; ++I) {
- AnalysisID AID = *I;
if (Pass *AnalysisPass = findAnalysisPass(*I, true))
RP.push_back(AnalysisPass);
else
- RP_NotAvail.push_back(AID);
+ RP_NotAvail.push_back(*I);
}
}
@@ -925,7 +916,7 @@
// If that is not the case then it will raise an assert when it is used.
continue;
AnalysisResolver *AR = P->getResolver();
- assert (AR && "Analysis Resolver is not set");
+ assert(AR && "Analysis Resolver is not set");
AR->addAnalysisImplsPair(*I, Impl);
}
}
@@ -966,7 +957,7 @@
}
void PMDataManager::dumpPassArguments() const {
- for(SmallVector<Pass *, 8>::const_iterator I = PassVector.begin(),
+ for (SmallVector<Pass *, 8>::const_iterator I = PassVector.begin(),
E = PassVector.end(); I != E; ++I) {
if (PMDataManager *PMD = dynamic_cast<PMDataManager *>(*I))
PMD->dumpPassArguments();
@@ -1074,16 +1065,14 @@
cerr << "Unable to schedule '" << RequiredPass->getPassName();
cerr << "' required by '" << P->getPassName() << "'\n";
#endif
- assert (0 && "Unable to schedule pass");
+ assert(0 && "Unable to schedule pass");
}
// Destructor
PMDataManager::~PMDataManager() {
-
for (SmallVector<Pass *, 8>::iterator I = PassVector.begin(),
E = PassVector.end(); I != E; ++I)
delete *I;
-
}
//===----------------------------------------------------------------------===//
@@ -1302,12 +1291,11 @@
/// runOnFunction method. Keep track of whether any of the passes modifies
/// the function, and if so, return true.
bool FPPassManager::runOnFunction(Function &F) {
+ if (F.isDeclaration())
+ return false;
bool Changed = false;
- if (F.isDeclaration())
- return false;
-
// Collect inherited analysis from Module level pass manager.
populateInheritedAnalysis(TPM->activeStack);
@@ -1339,11 +1327,10 @@
}
bool FPPassManager::runOnModule(Module &M) {
-
bool Changed = doInitialization(M);
- for(Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
- this->runOnFunction(*I);
+ for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
+ runOnFunction(*I);
return Changed |= doFinalization(M);
}
@@ -1410,12 +1397,11 @@
/// RequiredPass is run on the fly by Pass Manager when P requests it
/// through getAnalysis interface.
void MPPassManager::addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass) {
-
- assert (P->getPotentialPassManagerType() == PMT_ModulePassManager
- && "Unable to handle Pass that requires lower level Analysis pass");
- assert ((P->getPotentialPassManagerType() <
- RequiredPass->getPotentialPassManagerType())
- && "Unable to handle Pass that requires lower level Analysis pass");
+ assert(P->getPotentialPassManagerType() == PMT_ModulePassManager &&
+ "Unable to handle Pass that requires lower level Analysis pass");
+ assert((P->getPotentialPassManagerType() <
+ RequiredPass->getPotentialPassManagerType()) &&
+ "Unable to handle Pass that requires lower level Analysis pass");
FunctionPassManagerImpl *FPP = OnTheFlyManagers[P];
if (!FPP) {
@@ -1436,14 +1422,12 @@
/// Return function pass corresponding to PassInfo PI, that is
/// required by module pass MP. Instantiate analysis pass, by using
/// its runOnFunction() for function F.
-Pass* MPPassManager::getOnTheFlyPass(Pass *MP, const PassInfo *PI,
- Function &F) {
- AnalysisID AID = PI;
+Pass* MPPassManager::getOnTheFlyPass(Pass *MP, const PassInfo *PI, Function &F){
FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP];
- assert (FPP && "Unable to find on the fly pass");
+ assert(FPP && "Unable to find on the fly pass");
FPP->run(F);
- return (dynamic_cast<PMTopLevelManager *>(FPP))->findAnalysisPass(AID);
+ return (dynamic_cast<PMTopLevelManager *>(FPP))->findAnalysisPass(PI);
}
@@ -1453,9 +1437,7 @@
/// run - Execute all of the passes scheduled for execution. Keep track of
/// whether any of the passes modifies the module, and if so, return true.
bool PassManagerImpl::run(Module &M) {
-
bool Changed = false;
-
TimingInfo::createTheTimeInfo();
dumpArguments();
@@ -1487,15 +1469,13 @@
/// the Pass to the PassManager. When the PassManager is destroyed, the pass
/// will be destroyed as well, so there is no need to delete the pass. This
/// implies that all passes MUST be allocated with 'new'.
-void
-PassManager::add(Pass *P) {
+void PassManager::add(Pass *P) {
PM->add(P);
}
/// run - Execute all of the passes scheduled for execution. Keep track of
/// whether any of the passes modifies the module, and if so, return true.
-bool
-PassManager::run(Module &M) {
+bool PassManager::run(Module &M) {
return PM->run(M);
}
@@ -1549,18 +1529,12 @@
// Push PM on the stack and set its top level manager.
void PMStack::push(PMDataManager *PM) {
+ assert(PM && "Unable to push. Pass Manager expected");
- PMDataManager *Top = NULL;
- assert (PM && "Unable to push. Pass Manager expected");
-
- if (this->empty()) {
- Top = PM;
- }
- else {
- Top = this->top();
- PMTopLevelManager *TPM = Top->getTopLevelManager();
+ if (!this->empty()) {
+ PMTopLevelManager *TPM = this->top()->getTopLevelManager();
- assert (TPM && "Unable to find top level manager");
+ assert(TPM && "Unable to find top level manager");
TPM->addIndirectPassManager(PM);
PM->setTopLevelManager(TPM);
}
@@ -1570,11 +1544,10 @@
// Dump content of the pass manager stack.
void PMStack::dump() {
- for(std::deque<PMDataManager *>::iterator I = S.begin(),
- E = S.end(); I != E; ++I) {
- Pass *P = dynamic_cast<Pass *>(*I);
- printf("%s ", P->getPassName());
- }
+ for (std::deque<PMDataManager *>::iterator I = S.begin(),
+ E = S.end(); I != E; ++I)
+ printf("%s ", dynamic_cast<Pass *>(*I)->getPassName());
+
if (!S.empty())
printf("\n");
}
@@ -1583,7 +1556,6 @@
/// add self into that manager.
void ModulePass::assignPassManager(PMStack &PMS,
PassManagerType PreferredType) {
-
// Find Module Pass Manager
while(!PMS.empty()) {
PassManagerType TopPMType = PMS.top()->getPassManagerType();
@@ -1641,7 +1613,6 @@
/// in the PM Stack and add self into that manager.
void BasicBlockPass::assignPassManager(PMStack &PMS,
PassManagerType PreferredType) {
-
BBPassManager *BBP = NULL;
// Basic Pass Manager is a leaf pass manager. It does not handle
More information about the llvm-commits
mailing list