Set up ground work to verify preserved analysis info.
authorDevang Patel <dpatel@apple.com>
Thu, 19 Jul 2007 05:36:09 +0000 (05:36 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 19 Jul 2007 05:36:09 +0000 (05:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40039 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Pass.h
lib/VMCore/PassManager.cpp

index a5a98f531312ba85128f6ccb102365c088845bee..3a28f913303199d7f5f58bc3f19539e2f775f3c8 100644 (file)
@@ -161,6 +161,10 @@ public:
   ///
   virtual void releaseMemory() {}
 
+  /// verifyAnalysis() - This member can be implemented by a analysis pass to
+  /// check state of analysis information. 
+  virtual void verifyAnalysis() {}
+
   // dumpPassStructure - Implement the -debug-passes=PassStructure option
   virtual void dumpPassStructure(unsigned Offset = 0);
 
index af3cfb025dca290520a9ffbf6a2eb9b24c2b525a..8d780e98d022af8abe46df961fb37914a19ae791 100644 (file)
@@ -598,11 +598,18 @@ bool PMDataManager::preserveHigherLevelAnalysis(Pass *P) {
 void PMDataManager::removeNotPreservedAnalysis(Pass *P) {
   AnalysisUsage AnUsage;
   P->getAnalysisUsage(AnUsage);
+  const std::vector<AnalysisID> &PreservedSet = AnUsage.getPreservedSet();
 
+  // Verify preserved analysis
+  for (std::map<AnalysisID, Pass*>::iterator I = AvailableAnalysis.begin(),
+         E = AvailableAnalysis.end(); I != E; ++I) {
+    Pass *AP = I->second;
+    AP->verifyAnalysis();
+  }
+  
   if (AnUsage.getPreservesAll())
     return;
 
-  const std::vector<AnalysisID> &PreservedSet = AnUsage.getPreservedSet();
   for (std::map<AnalysisID, Pass*>::iterator I = AvailableAnalysis.begin(),
          E = AvailableAnalysis.end(); I != E; ) {
     std::map<AnalysisID, Pass*>::iterator Info = I++;