[llvm] [VPlan] Extract reverse operation for reverse accesses (PR #146525)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 30 05:40:43 PDT 2025
================
@@ -7754,14 +7754,30 @@ VPRecipeBuilder::tryToWidenMemory(Instruction *I, ArrayRef<VPValue *> Operands,
Builder.insert(VectorPtr);
Ptr = VectorPtr;
}
- if (LoadInst *Load = dyn_cast<LoadInst>(I))
- return new VPWidenLoadRecipe(*Load, Ptr, Mask, Consecutive, Reverse,
- VPIRMetadata(*Load, LVer), I->getDebugLoc());
- StoreInst *Store = cast<StoreInst>(I);
- return new VPWidenStoreRecipe(*Store, Ptr, Operands[0], Mask, Consecutive,
+ if (auto *Load = dyn_cast<LoadInst>(I)) {
+ auto *LoadR =
+ new VPWidenLoadRecipe(*Load, Ptr, Mask, Consecutive, Reverse,
+ VPIRMetadata(*Load, LVer), Load->getDebugLoc());
+ if (Reverse) {
+ Builder.insert(LoadR);
+ return new VPInstruction(VPInstruction::Reverse, {LoadR},
+ LoadR->getDebugLoc());
+ }
+ return LoadR;
+ }
+
+ auto *Store = cast<StoreInst>(I);
+ VPValue *StoredVal = Operands[0];
+ if (Reverse) {
+ auto *ReverseR = new VPInstruction(VPInstruction::Reverse, {StoredVal},
+ Store->getDebugLoc());
+ Builder.insert(ReverseR);
----------------
lukel97 wrote:
```suggestion
StoredVal = Builder.createNaryOp(VPInstruction::Reverse, StoredVal, Store->getDebugLoc());
```
https://github.com/llvm/llvm-project/pull/146525
More information about the llvm-commits
mailing list