* PassInfo is allowed to be missing now (ie, not all passes need be registered)
authorChris Lattner <sabre@nondot.org>
Mon, 29 Jul 2002 21:02:31 +0000 (21:02 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 29 Jul 2002 21:02:31 +0000 (21:02 +0000)
* 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

lib/VMCore/Pass.cpp

index fb751b5db05de2636231cdf98d51f7e8c5739499..06e77e7fe16ba0d305eeccd0c0ac02b8b95e3384 100644 (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) {