diff options
Diffstat (limited to 'contrib/llvm/lib/Transforms/Scalar/LoopDeletion.cpp')
| -rw-r--r-- | contrib/llvm/lib/Transforms/Scalar/LoopDeletion.cpp | 19 | 
1 files changed, 10 insertions, 9 deletions
diff --git a/contrib/llvm/lib/Transforms/Scalar/LoopDeletion.cpp b/contrib/llvm/lib/Transforms/Scalar/LoopDeletion.cpp index 98b068edf582..bc00ff3f3a42 100644 --- a/contrib/llvm/lib/Transforms/Scalar/LoopDeletion.cpp +++ b/contrib/llvm/lib/Transforms/Scalar/LoopDeletion.cpp @@ -17,6 +17,7 @@  #include "llvm/Transforms/Scalar.h"  #include "llvm/ADT/SmallVector.h"  #include "llvm/ADT/Statistic.h" +#include "llvm/Analysis/GlobalsModRef.h"  #include "llvm/Analysis/LoopPass.h"  #include "llvm/Analysis/ScalarEvolution.h"  #include "llvm/IR/Dominators.h" @@ -35,18 +36,19 @@ namespace {      }      // Possibly eliminate loop L if it is dead. -    bool runOnLoop(Loop *L, LPPassManager &LPM) override; +    bool runOnLoop(Loop *L, LPPassManager &) override;      void getAnalysisUsage(AnalysisUsage &AU) const override {        AU.addRequired<DominatorTreeWrapperPass>();        AU.addRequired<LoopInfoWrapperPass>(); -      AU.addRequired<ScalarEvolution>(); +      AU.addRequired<ScalarEvolutionWrapperPass>();        AU.addRequiredID(LoopSimplifyID);        AU.addRequiredID(LCSSAID); -      AU.addPreserved<ScalarEvolution>(); +      AU.addPreserved<ScalarEvolutionWrapperPass>();        AU.addPreserved<DominatorTreeWrapperPass>();        AU.addPreserved<LoopInfoWrapperPass>(); +      AU.addPreserved<GlobalsAAWrapperPass>();        AU.addPreservedID(LoopSimplifyID);        AU.addPreservedID(LCSSAID);      } @@ -64,7 +66,7 @@ INITIALIZE_PASS_BEGIN(LoopDeletion, "loop-deletion",                  "Delete dead loops", false, false)  INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)  INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass) -INITIALIZE_PASS_DEPENDENCY(ScalarEvolution) +INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass)  INITIALIZE_PASS_DEPENDENCY(LoopSimplify)  INITIALIZE_PASS_DEPENDENCY(LCSSA)  INITIALIZE_PASS_END(LoopDeletion, "loop-deletion", @@ -130,7 +132,7 @@ bool LoopDeletion::isLoopDead(Loop *L,  /// so could change the halting/non-halting nature of a program.  /// NOTE: This entire process relies pretty heavily on LoopSimplify and LCSSA  /// in order to make various safety checks work. -bool LoopDeletion::runOnLoop(Loop *L, LPPassManager &LPM) { +bool LoopDeletion::runOnLoop(Loop *L, LPPassManager &) {    if (skipOptnoneFunction(L))      return false; @@ -169,7 +171,7 @@ bool LoopDeletion::runOnLoop(Loop *L, LPPassManager &LPM) {    // Don't remove loops for which we can't solve the trip count.    // They could be infinite, in which case we'd be changing program behavior. -  ScalarEvolution &SE = getAnalysis<ScalarEvolution>(); +  ScalarEvolution &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE();    const SCEV *S = SE.getMaxBackedgeTakenCount(L);    if (isa<SCEVCouldNotCompute>(S))      return Changed; @@ -242,9 +244,8 @@ bool LoopDeletion::runOnLoop(Loop *L, LPPassManager &LPM) {    for (BasicBlock *BB : blocks)      loopInfo.removeBlock(BB); -  // The last step is to inform the loop pass manager that we've -  // eliminated this loop. -  LPM.deleteLoopFromQueue(L); +  // The last step is to update LoopInfo now that we've eliminated this loop. +  loopInfo.updateUnloop(L);    Changed = true;    ++NumDeleted;  | 
