diff options
Diffstat (limited to 'llvm/lib/Analysis/LoopPass.cpp')
| -rw-r--r-- | llvm/lib/Analysis/LoopPass.cpp | 40 | 
1 files changed, 40 insertions, 0 deletions
| diff --git a/llvm/lib/Analysis/LoopPass.cpp b/llvm/lib/Analysis/LoopPass.cpp index e2d2c2bc9d8..2727d2f9465 100644 --- a/llvm/lib/Analysis/LoopPass.cpp +++ b/llvm/lib/Analysis/LoopPass.cpp @@ -14,9 +14,44 @@  //===----------------------------------------------------------------------===//  #include "llvm/Analysis/LoopPass.h" +#include "llvm/Assembly/PrintModulePass.h" +#include "llvm/Support/Debug.h"  #include "llvm/Support/Timer.h"  using namespace llvm; +namespace { + +/// PrintLoopPass - Print a Function corresponding to a Loop. +/// +class PrintLoopPass : public LoopPass { +private: +  std::string Banner; +  raw_ostream &Out;       // raw_ostream to print on. + +public: +  static char ID; +  PrintLoopPass() : LoopPass(&ID), Out(dbgs()) {} +  PrintLoopPass(const std::string &B, raw_ostream &o) +      : LoopPass(&ID), Banner(B), Out(o) {} + +  virtual void getAnalysisUsage(AnalysisUsage &AU) const { +    AU.setPreservesAll(); +  } + +  bool runOnLoop(Loop *L, LPPassManager &) { +    Out << Banner; +    for (Loop::block_iterator b = L->block_begin(), be = L->block_end(); +         b != be; +         ++b) { +      (*b)->print(Out); +    } +    return false; +  } +}; + +char PrintLoopPass::ID = 0; +} +  //===----------------------------------------------------------------------===//  // LPPassManager  // @@ -306,6 +341,11 @@ void LPPassManager::dumpPassStructure(unsigned Offset) {  //===----------------------------------------------------------------------===//  // LoopPass +Pass *LoopPass::createPrinterPass(raw_ostream &O, +                                  const std::string &Banner) const { +  return new PrintLoopPass(Banner, O); +} +  // Check if this pass is suitable for the current LPPassManager, if  // available. This pass P is not suitable for a LPPassManager if P  // is not preserving higher level analysis info used by other | 

