[llvm] [VPlan] Implement VPlan-based unit-strideness speculation (PR #182595)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 29 00:56:52 PDT 2026


================
@@ -5478,39 +5523,15 @@ void VPlanTransforms::makeMemOpWideningDecisions(VPlan &Plan, VFRange &Range,
                                 getLoadStoreAddressSpace(I)))
           return false;
 
-        VPBuilder Builder(VPI);
-        VPSingleDefRecipe *VectorPtr = Builder.createConsecutiveVectorPointer(
-            Ptr, ScalarTy, Reverse, VPI->getDebugLoc());
-
-        VPValue *Mask = IsPredicated ? VPI->getMask() : nullptr;
-        // Reverse the mask so it matches the reversed access order.
-        if (Reverse && Mask)
-          Mask = Builder.createNaryOp(VPInstruction::Reverse, Mask,
-                                      VPI->getDebugLoc());
-
-        if (IsLoad) {
-          VPSingleDefRecipe *Load = Builder.createWidenLoad(
-              *cast<LoadInst>(I), VectorPtr, Mask,
-              /*Consecutive=*/true, *VPI, VPI->getDebugLoc());
-          // Reverse the loaded values back into program order.
-          if (Reverse)
-            Load = Builder.createNaryOp(VPInstruction::Reverse, Load,
-                                        VPI->getDebugLoc());
-          return ReplaceWith(VPI, Load);
-        }
-
-        VPValue *StoredVal = VPI->getOperand(0);
-        if (Reverse)
-          // Reverse the stored values so they are written in descending order.
-          StoredVal = Builder.createNaryOp(VPInstruction::Reverse, StoredVal,
-                                           VPI->getDebugLoc());
-
-        auto *StoreR = Builder.createWidenStore(
-            *cast<StoreInst>(I), VectorPtr, StoredVal, Mask,
-            /*Consecutive=*/true, *VPI, VPI->getDebugLoc());
-        return ReplaceWith(VPI, StoreR);
+        widenUnitStridedLoadStore(VPI, Reverse, IsPredicated);
+        return true;
       });
 
+  if (EnableVPlanBasedStrideMV &&
+      !CostCtx.L->getHeader()->getParent()->hasOptSize())
----------------
lukel97 wrote:

Eventually the flag will be enabled by default, so we wouldn't want to increase code size then with optsize

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


More information about the llvm-commits mailing list