[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

Devang Patel dpatel at apple.com
Tue Nov 7 13:32:15 PST 2006



Changes in directory llvm/lib/VMCore:

PassManager.cpp added (r1.1)
---
Log message:

Add BasicBlockPassManager_New.


---
Diffs of the changes:  (+56 -0)

 PassManager.cpp |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -c /dev/null llvm/lib/VMCore/PassManager.cpp:1.1
*** /dev/null	Tue Nov  7 15:32:07 2006
--- llvm/lib/VMCore/PassManager.cpp	Tue Nov  7 15:31:57 2006
***************
*** 0 ****
--- 1,56 ----
+ //===- PassManager.cpp - LLVM Pass Infrastructure Implementation ----------===//
+ //
+ //                     The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This file implements the LLVM Pass Manager infrastructure. 
+ //
+ //===----------------------------------------------------------------------===//
+ 
+ 
+ #include "llvm/PassManager.h"
+ #include "llvm/Function.h"
+ #include "llvm/Module.h"
+ 
+ using namespace llvm;
+ 
+ /// BasicBlockPassManager implementation
+ 
+ /// Add pass P into PassVector and return TRUE. If this pass is not
+ /// manageable by this manager then return FALSE.
+ bool
+ BasicBlockPassManager_New::addPass (Pass *P) {
+ 
+   BasicBlockPass *BP = dynamic_cast<BasicBlockPass*>(P);
+   if (!BP)
+     return false;
+ 
+   // TODO: Check if it suitable to manage P using this BasicBlockPassManager
+   // or we need another instance of BasicBlockPassManager
+ 
+   // Add pass
+   PassVector.push_back(BP);
+   return true;
+ }
+ 
+ /// Execute all of the passes scheduled for execution by invoking 
+ /// runOnBasicBlock method.  Keep track of whether any of the passes modifies 
+ /// the function, and if so, return true.
+ bool
+ BasicBlockPassManager_New::runOnFunction(Function &F) {
+ 
+   bool Changed = false;
+   for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
+     for (std::vector<Pass *>::iterator itr = PassVector.begin(),
+            e = PassVector.end(); itr != e; ++itr) {
+       Pass *P = *itr;
+       BasicBlockPass *BP = dynamic_cast<BasicBlockPass*>(P);
+       Changed |= BP->runOnBasicBlock(*I);
+     }
+   return Changed;
+ }
+ 






More information about the llvm-commits mailing list