[llvm] [LV] Convert gather loads with invariant stride into strided loads (PR #147297)

Mel Chen via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 12 01:27:27 PST 2026


================
@@ -1979,21 +2051,25 @@ class VPVectorEndPointerRecipe : public VPRecipeWithIRFlags,
 };
 
 /// A recipe to compute the pointers for widened memory accesses of \p
+/// SourceElementTy, with the \p Stride expressed in units of \p
 /// SourceElementTy. Unrolling adds an extra offset operand for unrolled parts >
 /// 0 and it produces `GEP Ptr, Offset`. The offset for unrolled part 0 is 0.
 class VPVectorPointerRecipe : public VPRecipeWithIRFlags {
   Type *SourceElementTy;
 
 public:
-  VPVectorPointerRecipe(VPValue *Ptr, Type *SourceElementTy,
+  VPVectorPointerRecipe(VPValue *Ptr, Type *SourceElementTy, VPValue *Stride,
                         GEPNoWrapFlags GEPFlags, DebugLoc DL)
-      : VPRecipeWithIRFlags(VPDef::VPVectorPointerSC, Ptr, GEPFlags, DL),
+      : VPRecipeWithIRFlags(VPDef::VPVectorPointerSC,
+                            ArrayRef<VPValue *>({Ptr, Stride}), GEPFlags, DL),
         SourceElementTy(SourceElementTy) {}
 
   VP_CLASSOF_IMPL(VPDef::VPVectorPointerSC)
 
+  VPValue *getStride() const { return getOperand(1); }
+
   VPValue *getOffset() {
-    return getNumOperands() == 2 ? getOperand(1) : nullptr;
+    return getNumOperands() > 2 ? getOperand(2) : nullptr;
   }
----------------
Mel-Chen wrote:

61f0b2a6989ffb0a40c4b9dfc64f3ca5a71c5e01

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


More information about the llvm-commits mailing list