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

Igor Kirillov via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 11 01:53:21 PDT 2025


================
@@ -2033,24 +2189,39 @@ ComplexDeinterleavingGraph::identifySplat(Value *R, Value *I) {
     return all_equal(Mask) && Mask[0] == 0;
   };
 
-  if (!IsSplat(R) || !IsSplat(I))
-    return nullptr;
-
-  auto *Real = dyn_cast<Instruction>(R);
-  auto *Imag = dyn_cast<Instruction>(I);
-  if ((!Real && Imag) || (Real && !Imag))
-    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.
+  if (auto FirstValAsInstruction = dyn_cast<Instruction>(Vals[0].Real)) {
----------------
igogo-x86 wrote:

nit: auto *FirstValAsInstruction

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


More information about the llvm-commits mailing list