[llvm] [LV][EVL] Generate negative strided load/store for reversed load/store (PR #123608)
Mel Chen via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 21 08:51:05 PST 2025
================
@@ -2628,18 +2617,26 @@ void VPWidenLoadEVLRecipe::execute(VPTransformState &State) {
Value *EVL = State.get(getEVL(), VPLane(0));
Value *Addr = State.get(getAddr(), !CreateGather);
Value *Mask = nullptr;
- if (VPValue *VPMask = getMask()) {
+ if (VPValue *VPMask = getMask())
Mask = State.get(VPMask);
- if (isReverse())
- Mask = createReverseEVL(Builder, Mask, EVL, "vp.reverse.mask");
- } else {
+ else
Mask = Builder.CreateVectorSplat(State.VF, Builder.getTrue());
- }
if (CreateGather) {
NewLI =
Builder.CreateIntrinsic(DataTy, Intrinsic::vp_gather, {Addr, Mask, EVL},
nullptr, "wide.masked.gather");
+ } else if (isReverse()) {
+ auto *EltTy = DataTy->getElementType();
+ auto *PtrTy = Addr->getType();
+ Value *Operands[] = {
+ Addr,
+ ConstantInt::getSigned(Builder.getInt32Ty(),
+ -LI->getDataLayout().getTypeAllocSize(EltTy)),
+ Mask, EVL};
+ NewLI = Builder.CreateIntrinsic(Intrinsic::experimental_vp_strided_load,
+ {DataTy, PtrTy, Builder.getInt32Ty()},
+ Operands, nullptr, "vp.neg.strided.load");
----------------
Mel-Chen wrote:
nit: I prefer another name.
```suggestion
Operands, nullptr, "vp.reverse.load");
```
https://github.com/llvm/llvm-project/pull/123608
More information about the llvm-commits
mailing list