[llvm] [IA][RISCV] More precise checking of shuffle within interleaved load (PR #185384)

Liao Chunyu via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 25 01:21:21 PDT 2026


================
@@ -350,7 +347,14 @@ bool InterleavedAccessImpl::lowerInterleavedLoad(
             Shuffle->getShuffleMask(), Factor, Index))
       return false;
 
-    assert(Shuffle->getShuffleMask().size() <= NumLoadElements);
+    ArrayRef<int> Mask = Shuffle->getShuffleMask();
+    if (Mask.size() * Factor > NumLoadElements) {
+      for (unsigned i = 0; i < Mask.size(); i++) {
----------------
ChunyuLiao wrote:

It may not be necessary. If it is not `isSingleSourceMask`, at line 219 !isa<UndefValue>(SVI->getOperand(1)) would return false. 
```
    auto *SVI = dyn_cast<ShuffleVectorInst>(User);
    if (!SVI || !isa<UndefValue>(SVI->getOperand(1)))
      return false;
```

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


More information about the llvm-commits mailing list