@@ -2931,11 +2931,11 @@ static VPRecipeBase *optimizeMaskToEVL(VPValue *HeaderMask,
29312931 VEPR->getGEPNoWrapFlags (), &EVL, VEPR->getDebugLoc ());
29322932 };
29332933
2934- auto m_VecEndPtrVF = [&Plan](VPValue *&Addr) { // NOLINT
2934+ auto m_VecEndPtrVF = [&Plan](VPValue *&Addr, int64_t Stride ) { // NOLINT
29352935 return m_VecEndPtr (
29362936 m_VPValue (Addr),
29372937 m_c_Mul (
2938- m_VPValue ( ),
2938+ m_SpecificSInt (Stride ),
29392939 m_Sub (m_ZExtOrTruncOrSelf (m_Specific (&Plan->getVF ())), m_One ())));
29402940 };
29412941
@@ -2949,7 +2949,10 @@ static VPRecipeBase *optimizeMaskToEVL(VPValue *HeaderMask,
29492949 if (match (&CurRecipe, m_Reverse (m_VPValue (ReversedVal))) &&
29502950 match (ReversedVal,
29512951 m_MaskedLoad (m_VPValue (EndPtr), m_RemoveMask (HeaderMask, Mask))) &&
2952- match (EndPtr, m_VecEndPtrVF (Addr)) &&
2952+ isa<VPVectorEndPointerRecipe>(EndPtr) &&
2953+ match (EndPtr,
2954+ m_VecEndPtrVF (
2955+ Addr, cast<VPVectorEndPointerRecipe>(EndPtr)->getStride ())) &&
29532956 cast<VPWidenLoadRecipe>(ReversedVal)->isReverse ()) {
29542957 auto *LoadR = new VPWidenLoadEVLRecipe (
29552958 *cast<VPWidenLoadRecipe>(ReversedVal), AdjustEndPtr (EndPtr), EVL, Mask);
@@ -2969,7 +2972,10 @@ static VPRecipeBase *optimizeMaskToEVL(VPValue *HeaderMask,
29692972 if (match (&CurRecipe,
29702973 m_MaskedStore (m_VPValue (EndPtr), m_Reverse (m_VPValue (ReversedVal)),
29712974 m_RemoveMask (HeaderMask, Mask))) &&
2972- match (EndPtr, m_VecEndPtrVF (Addr)) &&
2975+ isa<VPVectorEndPointerRecipe>(EndPtr) &&
2976+ match (EndPtr,
2977+ m_VecEndPtrVF (
2978+ Addr, cast<VPVectorEndPointerRecipe>(EndPtr)->getStride ())) &&
29732979 cast<VPWidenStoreRecipe>(CurRecipe).isReverse ()) {
29742980 auto *NewReverse = new VPWidenIntrinsicRecipe (
29752981 Intrinsic::experimental_vp_reverse,
@@ -3557,10 +3563,9 @@ void VPlanTransforms::createInterleaveGroups(
35573563 // the pointer operand of the interleaved access is supposed to be uniform.
35583564 if (IG->isReverse ()) {
35593565 B.setInsertPoint (InsertPos);
3560- auto *ReversePtr = B.createVectorEndPointerRecipe (
3566+ Addr = B.createVectorEndPointerRecipe (
35613567 Addr, getLoadStoreType (IRInsertPos), -(int64_t )IG->getFactor (), NW,
35623568 &Plan.getVF (), InsertPos->getDebugLoc ());
3563- Addr = ReversePtr;
35643569 }
35653570 auto *VPIG = new VPInterleaveRecipe (IG, Addr, StoredValues,
35663571 InsertPos->getMask (), NeedsMaskForGaps,
0 commit comments