diff options
Diffstat (limited to 'llvm/lib/Analysis/LoopInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/LoopInfo.cpp | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/llvm/lib/Analysis/LoopInfo.cpp b/llvm/lib/Analysis/LoopInfo.cpp index fec808d..3f78456 100644 --- a/llvm/lib/Analysis/LoopInfo.cpp +++ b/llvm/lib/Analysis/LoopInfo.cpp @@ -378,69 +378,6 @@ Loop::LocRange Loop::getLocRange() const { return LocRange(); } -bool Loop::hasDedicatedExits() const { - // Each predecessor of each exit block of a normal loop is contained - // within the loop. - SmallVector<BasicBlock *, 4> ExitBlocks; - getExitBlocks(ExitBlocks); - for (BasicBlock *BB : ExitBlocks) - for (BasicBlock *Predecessor : predecessors(BB)) - if (!contains(Predecessor)) - return false; - // All the requirements are met. - return true; -} - -void Loop::getUniqueExitBlocks( - SmallVectorImpl<BasicBlock *> &ExitBlocks) const { - assert(hasDedicatedExits() && - "getUniqueExitBlocks assumes the loop has canonical form exits!"); - - SmallVector<BasicBlock *, 32> SwitchExitBlocks; - for (BasicBlock *BB : this->blocks()) { - SwitchExitBlocks.clear(); - for (BasicBlock *Successor : successors(BB)) { - // If block is inside the loop then it is not an exit block. - if (contains(Successor)) - continue; - - pred_iterator PI = pred_begin(Successor); - BasicBlock *FirstPred = *PI; - - // If current basic block is this exit block's first predecessor - // then only insert exit block in to the output ExitBlocks vector. - // This ensures that same exit block is not inserted twice into - // ExitBlocks vector. - if (BB != FirstPred) - continue; - - // If a terminator has more then two successors, for example SwitchInst, - // then it is possible that there are multiple edges from current block - // to one exit block. - if (succ_size(BB) <= 2) { - ExitBlocks.push_back(Successor); - continue; - } - - // In case of multiple edges from current block to exit block, collect - // only one edge in ExitBlocks. Use switchExitBlocks to keep track of - // duplicate edges. - if (!is_contained(SwitchExitBlocks, Successor)) { - SwitchExitBlocks.push_back(Successor); - ExitBlocks.push_back(Successor); - } - } - } -} - -BasicBlock *Loop::getUniqueExitBlock() const { - SmallVector<BasicBlock *, 8> UniqueExitBlocks; - getUniqueExitBlocks(UniqueExitBlocks); - if (UniqueExitBlocks.size() == 1) - return UniqueExitBlocks[0]; - return nullptr; -} - #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) LLVM_DUMP_METHOD void Loop::dump() const { print(dbgs()); } |