From: Chandler Carruth Date: Thu, 18 Oct 2018 00:38:34 +0000 (+0000) Subject: [TI removal] Switch ObjCARC code to directly use the nice range-based X-Git-Tag: android-x86-9.0-r1~11707 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=cb0797beaa93523eaf3241aee1cc516131596f8c;p=android-x86%2Fexternal-llvm.git [TI removal] Switch ObjCARC code to directly use the nice range-based successors API or directly build the iterators out of the terminator instruction and avoid requiring a TerminatorInst variable. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344715 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/ObjCARC/DependencyAnalysis.cpp b/lib/Transforms/ObjCARC/DependencyAnalysis.cpp index 464805051c6..52a5e8c96ab 100644 --- a/lib/Transforms/ObjCARC/DependencyAnalysis.cpp +++ b/lib/Transforms/ObjCARC/DependencyAnalysis.cpp @@ -266,13 +266,10 @@ llvm::objcarc::FindDependencies(DependenceKind Flavor, for (const BasicBlock *BB : Visited) { if (BB == StartBB) continue; - const TerminatorInst *TI = cast(&BB->back()); - for (succ_const_iterator SI(TI), SE(TI, false); SI != SE; ++SI) { - const BasicBlock *Succ = *SI; + for (const BasicBlock *Succ : successors(BB)) if (Succ != StartBB && !Visited.count(Succ)) { DependingInsts.insert(reinterpret_cast(-1)); return; } - } } } diff --git a/lib/Transforms/ObjCARC/ObjCARCOpts.cpp b/lib/Transforms/ObjCARC/ObjCARCOpts.cpp index 21e2848030f..6ffaadc2b5f 100644 --- a/lib/Transforms/ObjCARC/ObjCARCOpts.cpp +++ b/lib/Transforms/ObjCARC/ObjCARCOpts.cpp @@ -914,8 +914,8 @@ void ObjCARCOpt::OptimizeIndividualCalls(Function &F) { GetRCIdentityRoot(PN->getIncomingValue(i)); if (IsNullOrUndef(Incoming)) HasNull = true; - else if (cast(PN->getIncomingBlock(i)->back()) - .getNumSuccessors() != 1) { + else if (PN->getIncomingBlock(i)->getTerminator()->getNumSuccessors() != + 1) { HasCriticalEdges = true; break; } @@ -1084,18 +1084,15 @@ ObjCARCOpt::CheckForCFGHazards(const BasicBlock *BB, "Unknown top down sequence state."); const Value *Arg = I->first; - const TerminatorInst *TI = cast(&BB->back()); bool SomeSuccHasSame = false; bool AllSuccsHaveSame = true; bool NotAllSeqEqualButKnownSafe = false; - succ_const_iterator SI(TI), SE(TI, false); - - for (; SI != SE; ++SI) { + for (const BasicBlock *Succ : successors(BB)) { // If VisitBottomUp has pointer information for this successor, take // what we know about it. const DenseMap::iterator BBI = - BBStates.find(*SI); + BBStates.find(Succ); assert(BBI != BBStates.end()); const BottomUpPtrState &SuccS = BBI->second.getPtrBottomUpState(Arg); const Sequence SuccSSeq = SuccS.GetSeq(); @@ -1414,21 +1411,20 @@ ComputePostOrders(Function &F, BasicBlock *EntryBB = &F.getEntryBlock(); BBState &MyStates = BBStates[EntryBB]; MyStates.SetAsEntry(); - TerminatorInst *EntryTI = cast(&EntryBB->back()); + Instruction *EntryTI = EntryBB->getTerminator(); SuccStack.push_back(std::make_pair(EntryBB, succ_iterator(EntryTI))); Visited.insert(EntryBB); OnStack.insert(EntryBB); do { dfs_next_succ: BasicBlock *CurrBB = SuccStack.back().first; - TerminatorInst *TI = cast(&CurrBB->back()); - succ_iterator SE(TI, false); + succ_iterator SE(CurrBB->getTerminator(), false); while (SuccStack.back().second != SE) { BasicBlock *SuccBB = *SuccStack.back().second++; if (Visited.insert(SuccBB).second) { - TerminatorInst *TI = cast(&SuccBB->back()); - SuccStack.push_back(std::make_pair(SuccBB, succ_iterator(TI))); + SuccStack.push_back( + std::make_pair(SuccBB, succ_iterator(SuccBB->getTerminator()))); BBStates[CurrBB].addSucc(SuccBB); BBState &SuccStates = BBStates[SuccBB]; SuccStates.addPred(CurrBB);