[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