diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -9442,8 +9442,13 @@ if (auto *Region = GetReplicateRegion(PrevRecipe)) { VPBasicBlock *Succ = cast(Region->getSingleSuccessor()); RecurSplice->moveBefore(*Succ, Succ->getFirstNonPhi()); - } else - RecurSplice->moveAfter(PrevRecipe); + } else { + auto &VPBB = *PrevRecipe->getParent(); + if (PrevRecipe->isPhi()) + RecurSplice->moveBefore(VPBB, VPBB.getFirstNonPhi()); + else + RecurSplice->moveAfter(PrevRecipe); + } RecurPhi->replaceAllUsesWith(RecurSplice); // Set the first operand of RecurSplice to RecurPhi again, after replacing // all users.