diff options
Diffstat (limited to 'contrib/llvm/lib/Transforms/IPO/LoopExtractor.cpp')
| -rw-r--r-- | contrib/llvm/lib/Transforms/IPO/LoopExtractor.cpp | 20 | 
1 files changed, 11 insertions, 9 deletions
diff --git a/contrib/llvm/lib/Transforms/IPO/LoopExtractor.cpp b/contrib/llvm/lib/Transforms/IPO/LoopExtractor.cpp index 41334ca5b429..8e4ad642ddd5 100644 --- a/contrib/llvm/lib/Transforms/IPO/LoopExtractor.cpp +++ b/contrib/llvm/lib/Transforms/IPO/LoopExtractor.cpp @@ -43,12 +43,13 @@ namespace {          initializeLoopExtractorPass(*PassRegistry::getPassRegistry());        } -    bool runOnLoop(Loop *L, LPPassManager &LPM) override; +    bool runOnLoop(Loop *L, LPPassManager &) override;      void getAnalysisUsage(AnalysisUsage &AU) const override {        AU.addRequiredID(BreakCriticalEdgesID);        AU.addRequiredID(LoopSimplifyID);        AU.addRequired<DominatorTreeWrapperPass>(); +      AU.addRequired<LoopInfoWrapperPass>();      }    };  } @@ -79,7 +80,7 @@ INITIALIZE_PASS(SingleLoopExtractor, "loop-extract-single",  //  Pass *llvm::createLoopExtractorPass() { return new LoopExtractor(); } -bool LoopExtractor::runOnLoop(Loop *L, LPPassManager &LPM) { +bool LoopExtractor::runOnLoop(Loop *L, LPPassManager &) {    if (skipOptnoneFunction(L))      return false; @@ -92,6 +93,7 @@ bool LoopExtractor::runOnLoop(Loop *L, LPPassManager &LPM) {      return false;    DominatorTree &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree(); +  LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();    bool Changed = false;    // If there is more than one top-level loop in this function, extract all of @@ -120,14 +122,14 @@ bool LoopExtractor::runOnLoop(Loop *L, LPPassManager &LPM) {    }    if (ShouldExtractLoop) { -    // We must omit landing pads. Landing pads must accompany the invoke +    // We must omit EH pads. EH pads must accompany the invoke      // instruction. But this would result in a loop in the extracted      // function. An infinite cycle occurs when it tries to extract that loop as      // well.      SmallVector<BasicBlock*, 8> ExitBlocks;      L->getExitBlocks(ExitBlocks);      for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) -      if (ExitBlocks[i]->isLandingPad()) { +      if (ExitBlocks[i]->isEHPad()) {          ShouldExtractLoop = false;          break;        } @@ -141,7 +143,7 @@ bool LoopExtractor::runOnLoop(Loop *L, LPPassManager &LPM) {        Changed = true;        // After extraction, the loop is replaced by a function call, so        // we shouldn't try to run any more loop passes on it. -      LPM.deleteLoopFromQueue(L); +      LI.updateUnloop(L);      }      ++NumExtracted;    } @@ -259,7 +261,7 @@ bool BlockExtractorPass::runOnModule(Module &M) {      // Figure out which index the basic block is in its function.      Function::iterator BBI = MF->begin();      std::advance(BBI, std::distance(F->begin(), Function::iterator(BB))); -    TranslatedBlocksToNotExtract.insert(BBI); +    TranslatedBlocksToNotExtract.insert(&*BBI);    }    while (!BlocksToNotExtractByName.empty()) { @@ -278,7 +280,7 @@ bool BlockExtractorPass::runOnModule(Module &M) {          BasicBlock &BB = *BI;          if (BB.getName() != BlockName) continue; -        TranslatedBlocksToNotExtract.insert(BI); +        TranslatedBlocksToNotExtract.insert(&*BI);        }      } @@ -291,8 +293,8 @@ bool BlockExtractorPass::runOnModule(Module &M) {    for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) {      SplitLandingPadPreds(&*F);      for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) -      if (!TranslatedBlocksToNotExtract.count(BB)) -        BlocksToExtract.push_back(BB); +      if (!TranslatedBlocksToNotExtract.count(&*BB)) +        BlocksToExtract.push_back(&*BB);    }    for (unsigned i = 0, e = BlocksToExtract.size(); i != e; ++i) {  | 
