Replace indunction variable with split value in loop body.
authorDevang Patel <dpatel@apple.com>
Mon, 20 Aug 2007 20:49:01 +0000 (20:49 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 20 Aug 2007 20:49:01 +0000 (20:49 +0000)
This fixes art miscompile.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41195 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LoopIndexSplit.cpp

index 4a5c1c8cc0b3125a3ac5539d2db1589180068468..598ed772a55088ae03c282b92b54c2e323f0fa2b 100644 (file)
@@ -418,7 +418,11 @@ bool LoopIndexSplit::processOneIterationLoop(SplitInfo &SD) {
 
   // Update CFG.
 
-  // As a first step to break this loop, remove Latch to Header edge.
+  // Replace index variable with split value in loop body. Loop body is executed
+  // only when index variable is equal to split value.
+  IndVar->replaceAllUsesWith(SD.SplitValue);
+
+  // Remove Latch to Header edge.
   BasicBlock *Latch = L->getLoopLatch();
   BasicBlock *LatchSucc = NULL;
   BranchInst *BR = dyn_cast<BranchInst>(Latch->getTerminator());