@@ -7530,9 +7530,6 @@ BasicBlock *EpilogueVectorizerMainLoop::createEpilogueVectorizedLoopSkeleton() {
7530
7530
EPI.MainLoopIterationCountCheck =
7531
7531
emitIterationCountCheck (LoopScalarPreHeader, false );
7532
7532
7533
- // Generate the induction variable.
7534
- EPI.VectorTripCount = getOrCreateVectorTripCount (LoopVectorPreHeader);
7535
-
7536
7533
replaceVPBBWithIRVPBB (Plan.getScalarPreheader (), LoopScalarPreHeader);
7537
7534
return LoopVectorPreHeader;
7538
7535
}
@@ -9808,7 +9805,7 @@ static void preparePlanForMainVectorLoop(VPlan &MainPlan, VPlan &EpiPlan) {
9808
9805
static void
9809
9806
preparePlanForEpilogueVectorLoop (VPlan &Plan, Loop *L,
9810
9807
const SCEV2ValueTy &ExpandedSCEVs,
9811
- const EpilogueLoopVectorizationInfo &EPI) {
9808
+ EpilogueLoopVectorizationInfo &EPI) {
9812
9809
VPRegionBlock *VectorLoop = Plan.getVectorLoopRegion ();
9813
9810
VPBasicBlock *Header = VectorLoop->getEntryBasicBlock ();
9814
9811
Header->setName (" vec.epilog.vector.body" );
@@ -9826,30 +9823,13 @@ preparePlanForEpilogueVectorLoop(VPlan &Plan, Loop *L,
9826
9823
// loop.
9827
9824
using namespace llvm ::PatternMatch;
9828
9825
PHINode *EPResumeVal = &*L->getLoopPreheader ()->phis ().begin ();
9829
- assert (EPResumeVal->getType () == IV->getScalarType () &&
9830
- match (EPResumeVal->getIncomingValueForBlock (
9831
- EPI.MainLoopIterationCountCheck ),
9832
- m_SpecificInt (0 )) &&
9833
- EPResumeVal ==
9834
- find_singleton<PHINode>(
9835
- L->getLoopPreheader ()->phis (),
9836
- [&EPI, IV](PHINode &P, bool ) -> PHINode * {
9837
- if (P.getType () == IV->getScalarType () &&
9838
- match (P.getIncomingValueForBlock (
9839
- EPI.MainLoopIterationCountCheck ),
9840
- m_SpecificInt (0 )) &&
9841
- any_of (P.incoming_values (),
9842
- [&EPI](Value *Inc) {
9843
- return Inc == EPI.VectorTripCount ;
9844
- }) &&
9845
- all_of (P.incoming_values (), [&EPI](Value *Inc) {
9846
- return Inc == EPI.VectorTripCount ||
9847
- match (Inc, m_SpecificInt (0 ));
9848
- }))
9849
- return &P;
9850
- return nullptr ;
9851
- }) &&
9852
- " Epilogue resume phis do not match!" );
9826
+ for (Value *Inc : EPResumeVal->incoming_values ()) {
9827
+ if (match (Inc, m_SpecificInt (0 )))
9828
+ continue ;
9829
+ assert (!EPI.VectorTripCount &&
9830
+ " Must only have a single non-zero incoming value" );
9831
+ EPI.VectorTripCount = Inc;
9832
+ }
9853
9833
VPValue *VPV = Plan.getOrAddLiveIn (EPResumeVal);
9854
9834
assert (all_of (IV->users (),
9855
9835
[](const VPUser *U) {
0 commit comments