[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