[LoopVectorizer] Move some code around to ease further refactoring. NFCI.
authorMichael Zolotukhin <mzolotukhin@apple.com>
Wed, 8 Jul 2015 21:47:53 +0000 (21:47 +0000)
committerMichael Zolotukhin <mzolotukhin@apple.com>
Wed, 8 Jul 2015 21:47:53 +0000 (21:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241739 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Vectorize/LoopVectorize.cpp

index f1f18613d9e73eec99a451a91aaba5bae487dc5c..0a3f8bfe44b179f561e3fcf8be31fa3a559e2eff 100644 (file)
@@ -2615,6 +2615,19 @@ void InnerLoopVectorizer::createEmptyLoop() {
   // times the unroll factor (num of SIMD instructions).
   Constant *Step = ConstantInt::get(IdxTy, VF * UF);
 
+  // Generate code to check that the loop's trip count that we computed by
+  // adding one to the backedge-taken count will not overflow.
+  auto PastOverflowCheck = std::next(BasicBlock::iterator(OverflowCheckAnchor));
+  BasicBlock *CheckBlock =
+      BypassBlock->splitBasicBlock(PastOverflowCheck, "overflow.checked");
+  if (ParentLoop)
+    ParentLoop->addBasicBlockToLoop(CheckBlock, *LI);
+  LoopBypassBlocks.push_back(CheckBlock);
+  ReplaceInstWithInst(
+      BypassBlock->getTerminator(),
+      BranchInst::Create(ScalarPH, CheckBlock, CheckBCOverflow));
+  BypassBlock = CheckBlock;
+
   // This is the IR builder that we use to add all of the logic for bypassing
   // the new vector loop.
   IRBuilder<> BypassBuilder(BypassBlock->getTerminator());
@@ -2647,22 +2660,6 @@ void InnerLoopVectorizer::createEmptyLoop() {
   Value *Cmp =
       BypassBuilder.CreateICmpEQ(IdxEndRoundDown, StartIdx, "cmp.zero");
 
-  // Generate code to check that the loops trip count that we computed by adding
-  // one to the backedge-taken count will not overflow.
-  {
-    auto PastOverflowCheck =
-        std::next(BasicBlock::iterator(OverflowCheckAnchor));
-    BasicBlock *CheckBlock =
-      BypassBlock->splitBasicBlock(PastOverflowCheck, "overflow.checked");
-    if (ParentLoop)
-      ParentLoop->addBasicBlockToLoop(CheckBlock, *LI);
-    LoopBypassBlocks.push_back(CheckBlock);
-    ReplaceInstWithInst(
-        BypassBlock->getTerminator(),
-        BranchInst::Create(ScalarPH, CheckBlock, CheckBCOverflow));
-    BypassBlock = CheckBlock;
-  }
-
   // Generate the code to check that the strides we assumed to be one are really
   // one. We want the new basic block to start at the first instruction in a
   // sequence of instructions that form a check.