While moving exit condition, do not drop loop latch on the floor.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47089 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/LoopIndexSplit.cpp b/lib/Transforms/Scalar/LoopIndexSplit.cpp
index 2d30eb6..383415b 100644
--- a/lib/Transforms/Scalar/LoopIndexSplit.cpp
+++ b/lib/Transforms/Scalar/LoopIndexSplit.cpp
@@ -1579,17 +1579,22 @@
   // destination.
   BranchInst *ExitingBR = cast<BranchInst>(ExitingBB->getTerminator());
   ExitingBR->moveBefore(CurrentBR);
-  if (ExitingBR->getSuccessor(0) == ExitBB)
+  BasicBlock *OrigDestBB = NULL;
+  if (ExitingBR->getSuccessor(0) == ExitBB) {
+    OrigDestBB = ExitingBR->getSuccessor(1);
     ExitingBR->setSuccessor(1, ActiveBB);
-  else
+  }
+  else {
+    OrigDestBB = ExitingBR->getSuccessor(0);
     ExitingBR->setSuccessor(0, ActiveBB);
+  }
     
   // Remove split condition and current split condition branch.
   SC->eraseFromParent();
   CurrentBR->eraseFromParent();
 
-  // Connect exiting block to split condition block.
-  new BranchInst(CondBB, ExitingBB);
+  // Connect exiting block to original destination.
+  new BranchInst(OrigDestBB, ExitingBB);
 
   // Update PHINodes
   updatePHINodes(ExitBB, ExitingBB, CondBB, IV, IVAdd);