[llvm] [LV] Support scalable interleave groups for factors 3, 5, 6 and 7 (PR #141865)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 11 08:57:36 PDT 2025
================
@@ -3294,21 +3294,13 @@ static Value *interleaveVectors(IRBuilderBase &Builder, ArrayRef<Value *> Vals,
// Scalable vectors cannot use arbitrary shufflevectors (only splats), so
// must use intrinsics to interleave.
if (VecTy->isScalableTy()) {
- assert(isPowerOf2_32(Factor) && "Unsupported interleave factor for "
- "scalable vectors, must be power of 2");
- SmallVector<Value *> InterleavingValues(Vals);
- // When interleaving, the number of values will be shrunk until we have the
- // single final interleaved value.
- auto *InterleaveTy = cast<VectorType>(InterleavingValues[0]->getType());
- for (unsigned Midpoint = Factor / 2; Midpoint > 0; Midpoint /= 2) {
- InterleaveTy = VectorType::getDoubleElementsVectorType(InterleaveTy);
- for (unsigned I = 0; I < Midpoint; ++I)
- InterleavingValues[I] = Builder.CreateIntrinsic(
- InterleaveTy, Intrinsic::vector_interleave2,
- {InterleavingValues[I], InterleavingValues[Midpoint + I]},
- /*FMFSource=*/nullptr, Name);
- }
- return InterleavingValues[0];
+ assert(Factor <= 8 && "Unsupported interelave factor for scalable vectors");
----------------
david-arm wrote:
nit: I think it should say "interleave"
https://github.com/llvm/llvm-project/pull/141865
More information about the llvm-commits
mailing list