[llvm] [LV]: Teach LV to recursively (de)interleave. (PR #89018)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 14 08:53:48 PST 2024
================
@@ -2862,15 +2874,12 @@ void VPInterleaveRecipe::execute(VPTransformState &State) {
&InterleaveFactor](Value *MaskForGaps) -> Value * {
if (State.VF.isScalable()) {
assert(!MaskForGaps && "Interleaved groups with gaps are not supported.");
- assert(InterleaveFactor == 2 &&
+ assert(isPowerOf2_32(InterleaveFactor) &&
"Unsupported deinterleave factor for scalable vectors");
auto *ResBlockInMask = State.get(BlockInMask);
- SmallVector<Value *, 2> Ops = {ResBlockInMask, ResBlockInMask};
- auto *MaskTy = VectorType::get(State.Builder.getInt1Ty(),
- State.VF.getKnownMinValue() * 2, true);
- return State.Builder.CreateIntrinsic(
- MaskTy, Intrinsic::vector_interleave2, Ops,
- /*FMFSource=*/nullptr, "interleaved.mask");
+ SmallVector<Value *> Ops;
+ Ops.resize(InterleaveFactor, ResBlockInMask);
----------------
paulwalker-arm wrote:
Not 100% sure but does `SmallVector<Value *> Ops(InterleaveFactor, ResBlockInMask);` do the same thing?
https://github.com/llvm/llvm-project/pull/89018
More information about the llvm-commits
mailing list