Make getUniqueExitBlocks's precondition assert more precise, to

avoid spurious failures. This fixes PR5758.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91147 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2009-12-11 20:05:23 +00:00
parent a4f9cc4e55
commit 050959cd08
3 changed files with 26 additions and 4 deletions

View File

@ -568,7 +568,7 @@ public:
/// getUniqueExitBlocks - Return all unique successor blocks of this loop.
/// These are the blocks _outside of the current loop_ which are branched to.
/// This assumes that loop is in canonical form.
/// This assumes that loop exits are in canonical form.
///
void getUniqueExitBlocks(SmallVectorImpl<BasicBlock *> &ExitBlocks) const;

View File

@ -316,12 +316,12 @@ bool Loop::hasDedicatedExits() const {
/// getUniqueExitBlocks - Return all unique successor blocks of this loop.
/// These are the blocks _outside of the current loop_ which are branched to.
/// This assumes that loop is in canonical form.
/// This assumes that loop exits are in canonical form.
///
void
Loop::getUniqueExitBlocks(SmallVectorImpl<BasicBlock *> &ExitBlocks) const {
assert(isLoopSimplifyForm() &&
"getUniqueExitBlocks assumes the loop is in canonical form!");
assert(hasDedicatedExits() &&
"getUniqueExitBlocks assumes the loop has canonical form exits!");
// Sort the blocks vector so that we can use binary search to do quick
// lookups.

View File

@ -0,0 +1,22 @@
; RUN: opt < %s -indvars -S -disable-output
; PR5758
define zeroext i1 @foo() nounwind {
entry:
indirectbr i8* undef, [label %"202", label %"133"]
"132": ; preds = %"133"
%0 = add i32 %1, 1 ; <i32> [#uses=1]
br label %"133"
"133": ; preds = %"132", %entry
%1 = phi i32 [ %0, %"132" ], [ 0, %entry ] ; <i32> [#uses=2]
%2 = icmp eq i32 %1, 4 ; <i1> [#uses=1]
br i1 %2, label %"134", label %"132"
"134": ; preds = %"133"
ret i1 true
"202": ; preds = %entry
ret i1 false
}