[llvm-commits] CVS: llvm/include/llvm/Analysis/LoopPass.h
Devang Patel
dpatel at apple.com
Thu Feb 22 00:56:36 PST 2007
Changes in directory llvm/include/llvm/Analysis:
LoopPass.h added (r1.1)
---
Log message:
Add Loop Pass Manager.
---
Diffs of the changes: (+86 -0)
LoopPass.h | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+)
Index: llvm/include/llvm/Analysis/LoopPass.h
diff -c /dev/null llvm/include/llvm/Analysis/LoopPass.h:1.1
*** /dev/null Thu Feb 22 02:56:27 2007
--- llvm/include/llvm/Analysis/LoopPass.h Thu Feb 22 02:56:17 2007
***************
*** 0 ****
--- 1,86 ----
+ //===- LoopPass.h - LoopPass class ----------------------------------------===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by Devang Patel and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This file defines LoopPass class. All loop optimization
+ // and transformation passes are derived from LoopPass.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef LLVM_LOOP_PASS_H
+ #define LLVM_LOOP_PASS_H
+
+ #include "llvm/Analysis/LoopInfo.h"
+ #include "llvm/Pass.h"
+ #include "llvm/PassManagers.h"
+ #include "llvm/Function.h"
+
+ namespace llvm {
+
+ class LPPassManager;
+ class Loop;
+ class Function;
+
+ class LoopPass : public Pass {
+
+ public:
+ // runOnLoop - THis method should be implemented by the subclass to perform
+ // whatever action is necessary for the specfied Loop.
+ virtual bool runOnLoop (Loop &L, LPPassManager &LPM) = 0;
+ virtual bool runOnFunctionBody (Function &F, LPPassManager &LPM) {
+ return false;
+ }
+
+ };
+
+ class LPPassManager : public FunctionPass, public PMDataManager {
+
+ public:
+ LPPassManager(int Depth) : PMDataManager(Depth) { }
+
+ /// run - Execute all of the passes scheduled for execution. Keep track of
+ /// whether any of the passes modifies the module, and if so, return true.
+ bool runOnFunction(Function &F);
+
+ /// Pass Manager itself does not invalidate any analysis info.
+ void getAnalysisUsage(AnalysisUsage &Info) const {
+ // LPPassManager needs LoopInfo. In the long term LoopInfo class will
+ // be consumed by LPPassManager.
+ Info.addRequired<LoopInfo>();
+ Info.setPreservesAll();
+ }
+
+ virtual const char *getPassName() const {
+ return "Loop Pass Manager";
+ }
+
+ // Print passes managed by this manager
+ void dumpPassStructure(unsigned Offset) {
+ llvm::cerr << std::string(Offset*2, ' ') << "Loop Pass Manager\n";
+ for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
+ Pass *P = getContainedPass(Index);
+ P->dumpPassStructure(Offset + 1);
+ dumpLastUses(P, Offset+1);
+ }
+ }
+
+ Pass *getContainedPass(unsigned N) {
+ assert ( N < PassVector.size() && "Pass number out of range!");
+ Pass *FP = static_cast<Pass *>(PassVector[N]);
+ return FP;
+ }
+
+ virtual PassManagerType getPassManagerType() {
+ return PMT_LoopPassManager;
+ }
+
+ };
+
+ } // End llvm namespace
+
+ #endif
More information about the llvm-commits
mailing list