[llvm] [SLP]Prefer segmented/deinterleaved loads to strided and fix codegen (PR #135058)

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 10 10:06:51 PDT 2025


================
@@ -17558,20 +17560,34 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
             *TLI, [](Value *) { return true; }, IsMasked, InterleaveFactor,
             CompressMask, LoadVecTy);
         assert(IsVectorized && "Expected to be vectorized");
-        Align CommonAlignment;
-        if (IsMasked)
-          CommonAlignment = computeCommonAlignment<LoadInst>(E->Scalars);
-        else
-          CommonAlignment = LI->getAlign();
+        Align CommonAlignment = LI->getAlign();
         if (IsMasked) {
+          unsigned VF = getNumElements(LoadVecTy);
           SmallVector<Constant *> MaskValues(
-              getNumElements(LoadVecTy) / getNumElements(LI->getType()),
+              VF / getNumElements(LI->getType()),
               ConstantInt::getFalse(VecTy->getContext()));
           for (int I : CompressMask)
             MaskValues[I] = ConstantInt::getTrue(VecTy->getContext());
           Constant *MaskValue = ConstantVector::get(MaskValues);
-          NewLI = Builder.CreateMaskedLoad(LoadVecTy, PO, CommonAlignment,
-                                           MaskValue);
+          if (InterleaveFactor) {
+            // FIXME: codegen currently recognizes only vp.load, not
+            // masked.load, as segmented (deinterleaved) loads.
----------------
alexey-bataev wrote:

The check added

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


More information about the llvm-commits mailing list