[llvm] [VPlan] Materialize VF and VFxUF using VPInstructions. (PR #152879)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 10 22:05:34 PDT 2025


================
@@ -3339,6 +3339,50 @@ void VPlanTransforms::materializeVectorTripCount(VPlan &Plan,
   VectorTC.replaceAllUsesWith(Res);
 }
 
+void VPlanTransforms::materializeVFAndVFxUF(VPlan &Plan, VPBasicBlock *VectorPH,
+                                            ElementCount VFEC) {
+  VPBuilder Builder(VectorPH, VectorPH->begin());
+  auto *TCTy = VPTypeAnalysis(Plan).inferScalarType(Plan.getTripCount());
+  VPValue &VF = Plan.getVF();
+  VPValue &VFxUF = Plan.getVFxUF();
+  if (VF.getNumUsers()) {
+    VPValue *RuntimeVF =
+        Plan.getOrAddLiveIn(ConstantInt::get(TCTy, VFEC.getKnownMinValue()));
+    if (VFEC.isScalable())
+      RuntimeVF = Builder.createNaryOp(
+          Instruction::Mul,
+          {Builder.createNaryOp(VPInstruction::VScale, {}, TCTy), RuntimeVF},
+          VPIRFlags::WrapFlagsTy(true, false));
----------------
lukel97 wrote:

Should we add a `VPBuilder::createElementCount` helper to mirror `IRBuilderBase::CreateElementCount`? We could also move in the `VFMulUF == 1` simplification from below into it.

https://github.com/llvm/llvm-project/pull/152879


More information about the llvm-commits mailing list