[llvm] [AArch64] Support symmetric complex deinterleaving with higher factors (PR #151295)

Igor Kirillov via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 31 09:50:51 PDT 2025


================
@@ -2033,24 +2190,38 @@ ComplexDeinterleavingGraph::identifySplat(Value *R, Value *I) {
     return all_equal(Mask) && Mask[0] == 0;
   };
 
-  if (!IsSplat(R) || !IsSplat(I))
-    return nullptr;
+  // The splats must meet the following requirements:
+  //   1. Must either be all instructions or all values.
+  //   2. Non-constant splats must live in the same block.
+  auto FirstValAsInstruction = dyn_cast<Instruction>(Vals[0].Real);
----------------
igogo-x86 wrote:

I feel like it would look nice if we split here into two branches and handle them separately:
```
if (FirstIsInst) {
  // Check that all are instructions and have the same parent
} else {
  // Just check that all Vals are not instructions
}
```

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


More information about the llvm-commits mailing list