[llvm] [VPlan] Use VPIRMetadata for VPInterleaveRecipe. (PR #153084)
Mel Chen via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 14 08:40:01 PDT 2025
================
@@ -2561,12 +2561,24 @@ void VPlanTransforms::createInterleaveGroups(
VPDominatorTree VPDT;
VPDT.recalculate(Plan);
for (const auto *IG : InterleaveGroups) {
+ // Get or create the start address for the interleave group.
+ auto *Start =
+ cast<VPWidenMemoryRecipe>(RecipeBuilder.getRecipe(IG->getMember(0)));
+
+ VPIRMetadata InterleaveMD(*Start);
SmallVector<VPValue *, 4> StoredValues;
- for (unsigned i = 0; i < IG->getFactor(); ++i)
- if (auto *SI = dyn_cast_or_null<StoreInst>(IG->getMember(i))) {
- auto *StoreR = cast<VPWidenStoreRecipe>(RecipeBuilder.getRecipe(SI));
+ for (unsigned i = 0; i < IG->getFactor(); ++i) {
----------------
Mel-Chen wrote:
Could this work?
```
// Get or create the start address for the interleave group.
auto *Start =
cast<VPWidenMemoryRecipe>(RecipeBuilder.getRecipe(IG->getMember(0)));
VPIRMetadata InterleaveMD(*Start);
SmallVector<VPValue *, 4> StoredValues;
if (auto *StoreR = dyn_cast<VPWidenStoreRecipe>(Start))
StoredValues.push_back(StoreR->getStoredValue());
for (unsigned i = 1; i < IG->getFactor(); ++i) {
Instruction *MemI = IG->getMember(i);
if (!MemI)
continue;
VPWidenMemoryRecipe *MemR =
cast<VPWidenMemoryRecipe>(RecipeBuilder.getRecipe(MemI));
if (!StoredValues.empty())
StoredValues.push_back(cast<VPWidenStoreRecipe>(MemR)->getStoredValue());
InterleaveMD.intersect(*MemR);
}
```
https://github.com/llvm/llvm-project/pull/153084
More information about the llvm-commits
mailing list