[LV] Split off memcheck block really at the first check
authorAdam Nemet <anemet@apple.com>
Tue, 3 Feb 2015 22:45:39 +0000 (22:45 +0000)
committerAdam Nemet <anemet@apple.com>
Tue, 3 Feb 2015 22:45:39 +0000 (22:45 +0000)
I've noticed this while trying to move addRuntimeCheck to LoopAccessAnalysis.

I think that the intention was to early exit from the overflow checking before
the code for the memchecks.  This is the entire reason why we compute
FirstCheckInst but then we don't use that as the splitting instruction but the
final check.  Looks like an oversight.

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

lib/Transforms/Vectorize/LoopVectorize.cpp

index 8d0c817e882ea4c619410f5c3ed39fbf858ae2d9..8d9d4d9cf83497c0e1e634d41fc83e4902cdf8e2 100644 (file)
@@ -2333,7 +2333,7 @@ void InnerLoopVectorizer::createEmptyLoop() {
   if (MemRuntimeCheck) {
     // Create a new block containing the memory check.
     BasicBlock *CheckBlock =
-        LastBypassBlock->splitBasicBlock(MemRuntimeCheck, "vector.memcheck");
+        LastBypassBlock->splitBasicBlock(FirstCheckInst, "vector.memcheck");
     if (ParentLoop)
       ParentLoop->addBasicBlockToLoop(CheckBlock, *LI);
     LoopBypassBlocks.push_back(CheckBlock);