[llvm] [VPlan] Transform VPFirstOrderRecurrencePHIRecipe into concrete recipes (PR #172009)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 14 01:51:00 PST 2025
================
@@ -3695,6 +3695,34 @@ void VPlanTransforms::convertToConcreteRecipes(VPlan &Plan) {
continue;
}
+ if (auto *FORPhiR = dyn_cast<VPFirstOrderRecurrencePHIRecipe>(&R)) {
+ VPValue *InitVec = FORPhiR->getStartValue();
+ DebugLoc DL = FORPhiR->getDebugLoc();
+ if (VF.isVector()) {
+ VPBuilder PHBuilder(Plan.getVectorPreheader());
+ VPValue *Poison = Plan.getOrAddLiveIn(
+ PoisonValue::get(TypeInfo.inferScalarType(InitVec)));
+ Type *IdxTy = Type::getInt32Ty(Plan.getContext());
+ VPValue *RuntimeVF = PHBuilder.createScalarZExtOrTrunc(
+ &Plan.getVF(), IdxTy, TypeInfo.inferScalarType(&Plan.getVF()),
+ DL);
+ VPValue *LastIdx = PHBuilder.createOverflowingOp(
+ Instruction::Sub, {RuntimeVF, Plan.getConstantInt(IdxTy, 1)},
+ {false, false}, DL);
+ InitVec = PHBuilder.createNaryOp(Instruction::InsertElement,
+ {Poison, InitVec, LastIdx}, DL,
+ "vector.recur.init");
+ }
+ auto *WidenPhi =
+ new VPWidenPHIRecipe(cast<PHINode>(FORPhiR->getUnderlyingInstr()),
----------------
artagnon wrote:
Would be good to introduce VPFirstOrderRecurrencePHIRecipe::getPHINode() like in VPWidenInductionRecipe::getPHINode()?
https://github.com/llvm/llvm-project/pull/172009
More information about the llvm-commits
mailing list