diff options
author | Chris Lattner <sabre@nondot.org> | 2009-08-28 00:43:14 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-08-28 00:43:14 +0000 |
commit | de64894dc37c03bee6d7ddc6c74403ce1d364f2a (patch) | |
tree | 114607f5f97d4eb4bdd2e7c6ca135bb6eafa4c60 | |
parent | 0e87e23f6e5f6615cf178933dcdec7a49436bb7a (diff) |
Fix PR3913, patch by Jakub Staszak!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80327 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Scalar/LoopIndexSplit.cpp | 2 | ||||
-rw-r--r-- | test/Transforms/LoopIndexSplit/PR3913.ll | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/LoopIndexSplit.cpp b/lib/Transforms/Scalar/LoopIndexSplit.cpp index 792b7537e5..259427e99b 100644 --- a/lib/Transforms/Scalar/LoopIndexSplit.cpp +++ b/lib/Transforms/Scalar/LoopIndexSplit.cpp @@ -435,7 +435,7 @@ bool LoopIndexSplit::processOneIterationLoop() { CmpInst::Predicate C2P = ExitCondition->getPredicate(); BranchInst *LatchBR = cast<BranchInst>(Latch->getTerminator()); - if (LatchBR->getOperand(0) != Header) + if (LatchBR->getOperand(1) != Header) C2P = CmpInst::getInversePredicate(C2P); Instruction *C2 = new ICmpInst(BR, C2P, SplitValue, ExitValue, "lisplit"); Instruction *NSplitCond = BinaryOperator::CreateAnd(C1, C2, "lisplit", BR); diff --git a/test/Transforms/LoopIndexSplit/PR3913.ll b/test/Transforms/LoopIndexSplit/PR3913.ll new file mode 100644 index 0000000000..c4fc0d1c5e --- /dev/null +++ b/test/Transforms/LoopIndexSplit/PR3913.ll @@ -0,0 +1,24 @@ +; RUN: llvm-as < %s | opt -loop-index-split | llvm-dis | not grep "icmp ne" + +define i32 @main() { +entry: + br label %header + +header: + %r = phi i32 [ 0, %entry ], [ %r3, %skip ] + %i = phi i32 [ 0, %entry ], [ %i1, %skip ] + %cond = icmp eq i32 %i, 99 + br i1 %cond, label %body, label %skip + +body: + br label %skip + +skip: + %r3 = phi i32 [ %r, %header ], [ 3, %body ] + %i1 = add i32 %i, 1 + %exitcond = icmp eq i32 %i1, 10 + br i1 %exitcond, label %exit, label %header + +exit: + ret i32 %r3 +} |