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 @@ -9454,16 +9454,18 @@ if (!RecurPhi) continue; - auto *RecurSplice = cast( - Builder.createNaryOp(VPInstruction::FirstOrderRecurrenceSplice, - {RecurPhi, RecurPhi->getBackedgeValue()})); - VPRecipeBase *PrevRecipe = RecurPhi->getBackedgeRecipe(); if (auto *Region = GetReplicateRegion(PrevRecipe)) { VPBasicBlock *Succ = cast(Region->getSingleSuccessor()); - RecurSplice->moveBefore(*Succ, Succ->getFirstNonPhi()); + Builder.setInsertPoint(Succ, Succ->getFirstNonPhi()); } else - RecurSplice->moveAfter(PrevRecipe); + Builder.setInsertPoint(PrevRecipe->getParent(), + std::next(PrevRecipe->getIterator())); + + auto *RecurSplice = cast( + Builder.createNaryOp(VPInstruction::FirstOrderRecurrenceSplice, + {RecurPhi, RecurPhi->getBackedgeValue()})); + RecurPhi->replaceAllUsesWith(RecurSplice); // Set the first operand of RecurSplice to RecurPhi again, after replacing // all users.