* PassInfo is allowed to be missing now (ie, not all passes need be registered)

* getPassName uses PassInfo if it's available
* PassInfo is now cached in the pass so that it is only looked up once, maximum

llvm-svn: 3123
This commit is contained in:
Chris Lattner 2002-07-29 21:02:31 +00:00
parent 83e9f43895
commit 071577d66d
1 changed files with 9 additions and 6 deletions

View File

@ -217,7 +217,11 @@ void Pass::addToPassManager(PassManagerT<Module> *PM, AnalysisUsage &AU) {
// getPassName - Use C++ RTTI to get a SOMEWHAT intelligable name for the pass.
//
const char *Pass::getPassName() const { return typeid(*this).name(); }
const char *Pass::getPassName() const {
if (const PassInfo *PI = getPassInfo())
return PI->getPassName();
return typeid(*this).name();
}
// print - Print out the internal state of the pass. This is called by Analyse
// to print out the contents of an analysis. Otherwise it is not neccesary to
@ -310,11 +314,10 @@ static std::vector<PassRegistrationListener*> *Listeners = 0;
// getPassInfo - Return the PassInfo data structure that corresponds to this
// pass...
const PassInfo *Pass::getPassInfo() const {
assert(PassInfoMap && "PassInfoMap not constructed yet??");
std::map<TypeInfo, PassInfo*>::iterator I =
PassInfoMap->find(typeid(*this));
assert(I != PassInfoMap->end() && "Pass has not been registered!");
return I->second;
if (PassInfoCache) return PassInfoCache;
if (PassInfoMap == 0) return 0;
std::map<TypeInfo, PassInfo*>::iterator I = PassInfoMap->find(typeid(*this));
return (I != PassInfoMap->end()) ? I->second : 0;
}
void RegisterPassBase::registerPass(PassInfo *PI) {