From: Chris Lattner Date: Mon, 29 Jul 2002 21:02:31 +0000 (+0000) Subject: * PassInfo is allowed to be missing now (ie, not all passes need be registered) X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=44050fb25a37a72ba74da9b0c8b41973325a7995;p=oota-llvm.git * 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3123 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/VMCore/Pass.cpp b/lib/VMCore/Pass.cpp index fb751b5db05..06e77e7fe16 100644 --- a/lib/VMCore/Pass.cpp +++ b/lib/VMCore/Pass.cpp @@ -217,7 +217,11 @@ void Pass::addToPassManager(PassManagerT *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 *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::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::iterator I = PassInfoMap->find(typeid(*this)); + return (I != PassInfoMap->end()) ? I->second : 0; } void RegisterPassBase::registerPass(PassInfo *PI) {