[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