[llvm] [VPlan] Directly unroll VectorPointerRecipe (PR #168886)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 14 14:10:12 PST 2025
================
@@ -297,6 +297,21 @@ void UnrollState::unrollRecipeByUF(VPRecipeBase &R) {
Copy->setOperand(1, getValueForPart(Op, Part));
continue;
}
+ if (auto *VPR = dyn_cast<VPVectorPointerRecipe>(&R)) {
+ VPBuilder Builder(VPR);
+ const DataLayout &DL =
+ Plan.getScalarHeader()->getIRBasicBlock()->getDataLayout();
+ Type *IndexTy = DL.getIndexType(TypeInfo.inferScalarType(VPR));
+ Type *VFTy = TypeInfo.inferScalarType(&Plan.getVF());
+ VPValue *VF = Builder.createScalarZExtOrTrunc(
+ &Plan.getVF(), IndexTy, VFTy, DebugLoc::getUnknown());
+ VPValue *VFxPart = Builder.createOverflowingOp(
+ Instruction::Mul, {VF, Plan.getConstantInt(IndexTy, Part)},
+ {true, true});
----------------
fhahn wrote:
```suggestion
// VFxUF does not wrap, so VF * Part also cannot wrap.
VPValue *VFxPart = Builder.createOverflowingOp(
Instruction::Mul, {VF, Plan.getConstantInt(IndexTy, Part)},
{true, true});
```
https://github.com/llvm/llvm-project/pull/168886
More information about the llvm-commits
mailing list