[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