diff options
| author | Devang Patel <dpatel@apple.com> | 2007-03-06 21:14:09 +0000 | 
|---|---|---|
| committer | Devang Patel <dpatel@apple.com> | 2007-03-06 21:14:09 +0000 | 
| commit | b0743b5d6a01a3f79e12a5b9ba98ece40cfd81e0 (patch) | |
| tree | 90150e3351006d016974eacf14c1914e8a7c6748 /llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | |
| parent | 13780ac7dbb04e929949f05c48be0fec3559c5c6 (diff) | |
| download | bcm5719-llvm-b0743b5d6a01a3f79e12a5b9ba98ece40cfd81e0.tar.gz bcm5719-llvm-b0743b5d6a01a3f79e12a5b9ba98ece40cfd81e0.zip  | |
Now LoopStrengthReduce is a LoopPass.
llvm-svn: 34984
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | 37 | 
1 files changed, 14 insertions, 23 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 329da542d50..fcbf9e301cf 100644 --- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -23,6 +23,7 @@  #include "llvm/DerivedTypes.h"  #include "llvm/Analysis/Dominators.h"  #include "llvm/Analysis/LoopInfo.h" +#include "llvm/Analysis/LoopPass.h"  #include "llvm/Analysis/ScalarEvolutionExpander.h"  #include "llvm/Support/CFG.h"  #include "llvm/Support/GetElementPtrTypeIterator.h" @@ -104,7 +105,7 @@ namespace {      }    }; -  class VISIBILITY_HIDDEN LoopStrengthReduce : public FunctionPass { +  class VISIBILITY_HIDDEN LoopStrengthReduce : public LoopPass {      LoopInfo *LI;      ETForest *EF;      ScalarEvolution *SE; @@ -143,19 +144,7 @@ namespace {        : TLI(tli) {      } -    virtual bool runOnFunction(Function &) { -      LI = &getAnalysis<LoopInfo>(); -      EF = &getAnalysis<ETForest>(); -      SE = &getAnalysis<ScalarEvolution>(); -      TD = &getAnalysis<TargetData>(); -      UIntPtrTy = TD->getIntPtrType(); -      Changed = false; - -      for (LoopInfo::iterator I = LI->begin(), E = LI->end(); I != E; ++I) -        runOnLoop(*I); -       -      return Changed; -    } +    bool runOnLoop(Loop *L, LPPassManager &LPM);      virtual void getAnalysisUsage(AnalysisUsage &AU) const {        // We split critical edges, so we change the CFG.  However, we do update @@ -179,7 +168,6 @@ namespace {      ///      Value *getCastedVersionOf(Instruction::CastOps opcode, Value *V);  private: -    void runOnLoop(Loop *L);      bool AddUsersIfInteresting(Instruction *I, Loop *L,                                 std::set<Instruction*> &Processed);      SCEVHandle GetExpressionSCEV(Instruction *E, Loop *L); @@ -196,7 +184,7 @@ private:    RegisterPass<LoopStrengthReduce> X("loop-reduce", "Loop Strength Reduction");  } -FunctionPass *llvm::createLoopStrengthReducePass(const TargetLowering *TLI) { +LoopPass *llvm::createLoopStrengthReducePass(const TargetLowering *TLI) {    return new LoopStrengthReduce(TLI);  } @@ -1271,12 +1259,15 @@ namespace {    };  } -void LoopStrengthReduce::runOnLoop(Loop *L) { -  // First step, transform all loops nesting inside of this loop. -  for (LoopInfo::iterator I = L->begin(), E = L->end(); I != E; ++I) -    runOnLoop(*I); +bool LoopStrengthReduce::runOnLoop(Loop *L, LPPassManager &LPM) { -  // Next, find all uses of induction variables in this loop, and catagorize +  LI = &getAnalysis<LoopInfo>(); +  EF = &getAnalysis<ETForest>(); +  SE = &getAnalysis<ScalarEvolution>(); +  TD = &getAnalysis<TargetData>(); +  UIntPtrTy = TD->getIntPtrType(); + +  // Find all uses of induction variables in this loop, and catagorize    // them by stride.  Start by finding all of the PHI nodes in the header for    // this loop.  If they are induction variables, inspect their uses.    std::set<Instruction*> Processed;   // Don't reprocess instructions. @@ -1284,7 +1275,7 @@ void LoopStrengthReduce::runOnLoop(Loop *L) {      AddUsersIfInteresting(I, L, Processed);    // If we have nothing to do, return. -  if (IVUsesByStride.empty()) return; +  if (IVUsesByStride.empty()) return false;    // Optimize induction variables.  Some indvar uses can be transformed to use    // strides that will be needed for other purposes.  A common example of this @@ -1368,5 +1359,5 @@ void LoopStrengthReduce::runOnLoop(Loop *L) {    CastedPointers.clear();    IVUsesByStride.clear();    StrideOrder.clear(); -  return; +  return false;  }  | 

