[llvm] [LV] Recognize UF*vscale as a valid canonical-IV increment step (PR #196722)

Hassnaa Hamdi via llvm-commits llvm-commits at lists.llvm.org
Tue May 12 04:34:48 PDT 2026


================
@@ -1804,5 +1804,38 @@ TEST_F(VPInstructionTest, VPSymbolicValueAddUserAfterMaterialization) {
 }
 #endif
 
+TEST_F(VPRecipeTest, UFAddUsersBeforeMaterialization) {
+  VPlan &Plan = getPlan();
+  VPBasicBlock *Header = Plan.createVPBasicBlock("vector.header");
+  VPBasicBlock *Latch = Plan.createVPBasicBlock("vector.latch");
+  VPRegionBlock *LoopRegion = Plan.createLoopRegion(
+      Type::getInt32Ty(C), DebugLoc(), "vector.loop", Header, Latch);
+  VPBlockUtils::connectBlocks(Header, Latch);
+  VPBlockUtils::connectBlocks(Plan.getEntry(), LoopRegion);
+  VPBlockUtils::connectBlocks(LoopRegion, Plan.getScalarHeader());
+
+  auto *VScale = new VPInstruction(VPInstruction::VScale, {});
+  Plan.getVectorPreheader()->appendRecipe(VScale);
+
+  VPValue *UF = &Plan.getUF();
+  auto *Step =
+      new VPInstruction(Instruction::Mul, {VScale, UF},
+                        VPIRFlags(VPIRFlags::WrapFlagsTy(false, false)));
+  Plan.getVectorPreheader()->appendRecipe(Step);
+
+  auto *Increment = new VPInstruction(
+      Instruction::Add, {LoopRegion->getCanonicalIV(), Step},
+      VPIRFlags(VPIRFlags::WrapFlagsTy(LoopRegion->hasCanonicalIVNUW(), false)),
----------------
hassnaaHamdi wrote:

Same thing like above.

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


More information about the llvm-commits mailing list