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 _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits