diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h index 0b596e7e4f633..6b78fa31e59dc 100644 --- a/llvm/lib/Transforms/Vectorize/VPlan.h +++ b/llvm/lib/Transforms/Vectorize/VPlan.h @@ -2246,12 +2246,12 @@ class VPReductionRecipe : public VPSingleDefRecipe { /// The Operands are {ChainOp, VecOp, EVL, [Condition]}. class VPReductionEVLRecipe : public VPReductionRecipe { public: - VPReductionEVLRecipe(VPReductionRecipe *R, VPValue *EVL, VPValue *CondOp) + VPReductionEVLRecipe(VPReductionRecipe &R, VPValue &EVL, VPValue *CondOp) : VPReductionRecipe( - VPDef::VPReductionEVLSC, R->getRecurrenceDescriptor(), - cast_or_null(R->getUnderlyingValue()), - ArrayRef({R->getChainOp(), R->getVecOp(), EVL}), CondOp, - R->isOrdered()) {} + VPDef::VPReductionEVLSC, R.getRecurrenceDescriptor(), + cast_or_null(R.getUnderlyingValue()), + ArrayRef({R.getChainOp(), R.getVecOp(), &EVL}), CondOp, + R.isOrdered()) {} ~VPReductionEVLRecipe() override = default; @@ -2558,10 +2558,10 @@ struct VPWidenLoadRecipe final : public VPWidenMemoryRecipe, public VPValue { /// using the address to load from, the explicit vector length and an optional /// mask. struct VPWidenLoadEVLRecipe final : public VPWidenMemoryRecipe, public VPValue { - VPWidenLoadEVLRecipe(VPWidenLoadRecipe *L, VPValue *EVL, VPValue *Mask) - : VPWidenMemoryRecipe(VPDef::VPWidenLoadEVLSC, L->getIngredient(), - {L->getAddr(), EVL}, L->isConsecutive(), - L->isReverse(), L->getDebugLoc()), + VPWidenLoadEVLRecipe(VPWidenLoadRecipe &L, VPValue &EVL, VPValue *Mask) + : VPWidenMemoryRecipe(VPDef::VPWidenLoadEVLSC, L.getIngredient(), + {L.getAddr(), &EVL}, L.isConsecutive(), + L.isReverse(), L.getDebugLoc()), VPValue(this, &getIngredient()) { setMask(Mask); } @@ -2634,11 +2634,10 @@ struct VPWidenStoreRecipe final : public VPWidenMemoryRecipe { /// using the value to store, the address to store to, the explicit vector /// length and an optional mask. struct VPWidenStoreEVLRecipe final : public VPWidenMemoryRecipe { - VPWidenStoreEVLRecipe(VPWidenStoreRecipe *S, VPValue *EVL, VPValue *Mask) - : VPWidenMemoryRecipe(VPDef::VPWidenStoreEVLSC, S->getIngredient(), - {S->getAddr(), S->getStoredValue(), EVL}, - S->isConsecutive(), S->isReverse(), - S->getDebugLoc()) { + VPWidenStoreEVLRecipe(VPWidenStoreRecipe &S, VPValue &EVL, VPValue *Mask) + : VPWidenMemoryRecipe(VPDef::VPWidenStoreEVLSC, S.getIngredient(), + {S.getAddr(), S.getStoredValue(), &EVL}, + S.isConsecutive(), S.isReverse(), S.getDebugLoc()) { setMask(Mask); } diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp index c91fd0f118e31..045f6c356669f 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp @@ -1488,13 +1488,13 @@ bool VPlanTransforms::tryAddExplicitVectorLength(VPlan &Plan) { if (auto *MemR = dyn_cast(CurRecipe)) { VPValue *NewMask = GetNewMask(MemR->getMask()); if (auto *L = dyn_cast(MemR)) - NewRecipe = new VPWidenLoadEVLRecipe(L, VPEVL, NewMask); + NewRecipe = new VPWidenLoadEVLRecipe(*L, *VPEVL, NewMask); else if (auto *S = dyn_cast(MemR)) - NewRecipe = new VPWidenStoreEVLRecipe(S, VPEVL, NewMask); + NewRecipe = new VPWidenStoreEVLRecipe(*S, *VPEVL, NewMask); else llvm_unreachable("unsupported recipe"); } else if (auto *RedR = dyn_cast(CurRecipe)) { - NewRecipe = new VPReductionEVLRecipe(RedR, VPEVL, + NewRecipe = new VPReductionEVLRecipe(*RedR, *VPEVL, GetNewMask(RedR->getCondOp())); } diff --git a/llvm/unittests/Transforms/Vectorize/VPlanTest.cpp b/llvm/unittests/Transforms/Vectorize/VPlanTest.cpp index d9d6789134d88..9cf9060458bc9 100644 --- a/llvm/unittests/Transforms/Vectorize/VPlanTest.cpp +++ b/llvm/unittests/Transforms/Vectorize/VPlanTest.cpp @@ -1140,7 +1140,7 @@ TEST(VPRecipeTest, MayHaveSideEffectsAndMayReadWriteMemory) { VPReductionRecipe Recipe(RecurrenceDescriptor(), nullptr, &ChainOp, &CondOp, &VecOp, false); VPValue EVL; - VPReductionEVLRecipe EVLRecipe(&Recipe, &EVL, &CondOp); + VPReductionEVLRecipe EVLRecipe(Recipe, EVL, &CondOp); EXPECT_FALSE(EVLRecipe.mayHaveSideEffects()); EXPECT_FALSE(EVLRecipe.mayReadFromMemory()); EXPECT_FALSE(EVLRecipe.mayWriteToMemory()); @@ -1495,7 +1495,7 @@ TEST(VPRecipeTest, CastVPReductionEVLRecipeToVPUser) { VPReductionRecipe Recipe(RecurrenceDescriptor(), nullptr, &ChainOp, &CondOp, &VecOp, false); VPValue EVL; - VPReductionEVLRecipe EVLRecipe(&Recipe, &EVL, &CondOp); + VPReductionEVLRecipe EVLRecipe(Recipe, EVL, &CondOp); EXPECT_TRUE(isa(&EVLRecipe)); VPRecipeBase *BaseR = &EVLRecipe; EXPECT_TRUE(isa(BaseR));