[llvm] [VPlan] Materialize VF and VFxUF using VPInstructions. (PR #152879)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 11 04:54:58 PDT 2025
================
@@ -3335,6 +3335,33 @@ void VPlanTransforms::materializeVectorTripCount(VPlan &Plan,
VectorTC.replaceAllUsesWith(Res);
}
+void VPlanTransforms::materializeVFAndVFxUF(VPlan &Plan, VPBasicBlock *VectorPH,
+ ElementCount VFEC) {
+ VPBuilder Builder(VectorPH, VectorPH->begin());
+ Type *TCTy = VPTypeAnalysis(Plan).inferScalarType(Plan.getTripCount());
+ VPValue &VF = Plan.getVF();
+ VPValue &VFxUF = Plan.getVFxUF();
+ if (VF.getNumUsers()) {
+ VPValue *RuntimeVF = Builder.createElementCount(TCTy, VFEC);
+ if (any_of(VF.users(), [&VF](VPUser *U) { return !U->usesScalars(&VF); })) {
+ auto *BC = Builder.createNaryOp(VPInstruction::Broadcast, RuntimeVF);
+ VF.replaceUsesWithIf(
+ BC, [&VF](VPUser &U, unsigned) { return !U.usesScalars(&VF); });
+ }
+ VF.replaceAllUsesWith(RuntimeVF);
----------------
david-arm wrote:
How does this work, given you're undoing the VF.replaceUsesWithIf call above?
https://github.com/llvm/llvm-project/pull/152879
More information about the llvm-commits
mailing list