[llvm] [VPlan] Don't bail creating interleave group if it has dead members (PR #208415)
Mel Chen via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 9 08:16:03 PDT 2026
================
@@ -3844,6 +3846,10 @@ void VPlanTransforms::createInterleaveGroups(
Instruction *IRInsertPos = IG->getInsertPos();
auto *InsertPos = IRMemberToRecipe.lookup(IRInsertPos);
+ if (!InsertPos) {
+ InsertPos = Start;
+ IRInsertPos = StartMember;
+ }
----------------
Mel-Chen wrote:
There's an issue here. The order of InsertPos and group members is actually independent; InsertPos depends on the program order. Therefore, when the InsertPos recipe is dead, we need to find a new InsertPos recipe instead of just setting it to the first alive member. Maybe we can use properlyDominates to find the new InsertPos. Like:
``` c++
if (!InsertPos) {
InsertPos = Start;
for (unsigned I = IG->getIndex(StartMember) + 1; I < IG->getFactor(); ++I) {
Instruction *Member = IG->getMember(I);
if (!Member)
continue;
auto *MemberR = IRMemberToRecipe.lookup(Member);
if (!MemberR)
continue;
if (VPDT.properlyDominates(MemberR, InsertPos))
InsertPos = MemberR;
}
IRInsertPos = cast<VPWidenMemoryRecipe>(InsertPos)->getIngredient();
}
```
and add a test case where the load order is: member 2 (Dead InsertPos) -> member 1 -> member 0.
https://github.com/llvm/llvm-project/pull/208415
More information about the llvm-commits
mailing list