diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-09-06 02:26:10 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-09-06 02:26:10 +0000 |
commit | 8f78a58e14fa754cde827e46ad03f00c7a6ead01 (patch) | |
tree | 1d83ef98ecaa3cd9f02b23d398f4b0adbed71ed9 /include/llvm/Analysis | |
parent | 92a97a9166e359e195d949e63d7e24a4a33284cf (diff) | |
download | llvm-8f78a58e14fa754cde827e46ad03f00c7a6ead01.tar.gz llvm-8f78a58e14fa754cde827e46ad03f00c7a6ead01.tar.bz2 llvm-8f78a58e14fa754cde827e46ad03f00c7a6ead01.tar.xz |
Revert r80926. It causes loop unswitch assertion and slow down some JIT tests significantly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81101 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Analysis')
-rw-r--r-- | include/llvm/Analysis/LoopInfo.h | 72 |
1 files changed, 4 insertions, 68 deletions
diff --git a/include/llvm/Analysis/LoopInfo.h b/include/llvm/Analysis/LoopInfo.h index 1892bc78ae..b803176d88 100644 --- a/include/llvm/Analysis/LoopInfo.h +++ b/include/llvm/Analysis/LoopInfo.h @@ -376,73 +376,11 @@ public: /// verifyLoop - Verify loop structure void verifyLoop() const { #ifndef NDEBUG - assert(!Blocks.empty() && "Loop header is missing"); - assert(getHeader() && "Loop header is missing"); - - // Verify the individual blocks. - for (block_iterator I = block_begin(), E = block_end(); I != E; ++I) { - BlockT *BB = *I; - bool HasInsideLoopSuccs = false; - bool HasInsideLoopPreds = false; - SmallVector<BlockT *, 2> OutsideLoopPreds; - - typedef GraphTraits<BlockT*> BlockTraits; - for (typename BlockTraits::ChildIteratorType SI = - BlockTraits::child_begin(BB), SE = BlockTraits::child_end(BB); - SI != SE; ++SI) - if (contains(*SI)) - HasInsideLoopSuccs = true; - typedef GraphTraits<Inverse<BlockT*> > InvBlockTraits; - for (typename InvBlockTraits::ChildIteratorType PI = - InvBlockTraits::child_begin(BB), PE = InvBlockTraits::child_end(BB); - PI != PE; ++PI) { - if (contains(*PI)) - HasInsideLoopPreds = true; - else - OutsideLoopPreds.push_back(*PI); - } - - if (BB == getHeader()) { - assert(!OutsideLoopPreds.empty() && "Loop is unreachable!"); - } else if (!OutsideLoopPreds.empty()) { - // A non-header loop shouldn't be reachable from outside the loop, - // though it is permitted if the predecessor is not itself actually - // reachable. - BlockT *EntryBB = BB->getParent()->begin(); - for (df_iterator<BlockT *> NI = df_begin(EntryBB), - NE = df_end(EntryBB); NI != NE; ++NI) - for (unsigned i = 0, e = OutsideLoopPreds.size(); i != e; ++i) - assert(*NI != OutsideLoopPreds[i] && - "Loop has multiple entry points!"); - } - assert(HasInsideLoopPreds && "Loop block has no in-loop predecessors!"); - assert(HasInsideLoopSuccs && "Loop block has no in-loop successors!"); - assert(BB != getHeader()->getParent()->begin() && - "Loop contains function entry block!"); - } - - // Verify the subloops. - for (iterator I = begin(), E = end(); I != E; ++I) { - // Each block in each subloop should be contained within this loop. - for (block_iterator BI = (*I)->block_begin(), BE = (*I)->block_end(); - BI != BE; ++BI) { - assert(contains(*BI) && - "Loop does not contain all the blocks of a subloop!"); - } - // Recursively check the subloop. + assert (getHeader() && "Loop header is missing"); + assert (getLoopPreheader() && "Loop preheader is missing"); + assert (getLoopLatch() && "Loop latch is missing"); + for (iterator I = SubLoops.begin(), E = SubLoops.end(); I != E; ++I) (*I)->verifyLoop(); - } - - // Verify the parent loop. - if (ParentLoop) { - bool FoundSelf = false; - for (iterator I = ParentLoop->begin(), E = ParentLoop->end(); I != E; ++I) - if (*I == this) { - FoundSelf = true; - break; - } - assert(FoundSelf && "Loop is not a subloop of its parent!"); - } #endif } @@ -935,8 +873,6 @@ public: /// virtual bool runOnFunction(Function &F); - virtual void verifyAnalysis() const; - virtual void releaseMemory() { LI.releaseMemory(); } virtual void print(raw_ostream &O, const Module* M = 0) const; |