Implement top level FunctionPassManager::run(Function &F)
authorDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 22:57:48 +0000 (22:57 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 22:57:48 +0000 (22:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32381 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/PassManager.cpp

index 5c9da43b867fd0f70af42ddaa33398070fcbdeae..3207ef2a3f5be4dd78691dd6476d172be470d3a4 100644 (file)
@@ -401,6 +401,7 @@ public:
   /// so, return true.
   bool runOnModule(Module &M);
   bool runOnFunction(Function &F);
+  bool run(Function &F);
 
   /// doInitialization - Run all of the initializers for the function passes.
   ///
@@ -800,7 +801,7 @@ bool FunctionPassManager_New::run(Function &F) {
     cerr << "Error reading bytecode file: " << errstr << "\n";
     abort();
   }
-  return FPM->runOnFunction(F);
+  return FPM->run(F);
 }
 
 
@@ -934,6 +935,19 @@ inline bool FunctionPassManagerImpl_New::doFinalization(Module &M) {
   return Changed;
 }
 
+// Execute all the passes managed by this top level manager.
+// Return true if any function is modified by a pass.
+bool FunctionPassManagerImpl_New::run(Function &F) {
+
+  bool Changed = false;
+  for (std::vector<Pass *>::iterator I = passManagersBegin(),
+         E = passManagersEnd(); I != E; ++I) {
+    FunctionPass *FP = dynamic_cast<FunctionPass *>(*I);
+    Changed |= FP->runOnFunction(F);
+  }
+  return Changed;
+}
+
 //===----------------------------------------------------------------------===//
 // ModulePassManager implementation