[PATCH] D137704: [RISCV] Make lowerVECTOR_SHUFFLEAsVNSRL support more vnsrl shuffle pattern.
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 10 22:23:00 PST 2022
craig.topper added inline comments.
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:2761
+ return false;
+ int Difference = Mask[1] - Mask[0];
+ if (Difference <= Mask[0])
----------------
What if Mask[0] is -1 and Mask[1] is 1. The different will be 2. I don't think these checks block that.
I guess maybe it's handled by the std::any_of later?
I'd feel better if we checked Mask[0] and Mask[1] are >= 0 before the subtract.
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:2774
+ // Find first -1 and check whether the mask behind is -1.
+ ArrayRef<int>::iterator FirstUndef = find(Mask, -1);
+ if (std::any_of(FirstUndef, std::end(Mask),
----------------
You can use auto here.
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:2775
+ ArrayRef<int>::iterator FirstUndef = find(Mask, -1);
+ if (std::any_of(FirstUndef, std::end(Mask),
+ [](int MaskIdx) { return MaskIdx != -1; }))
----------------
Mask.end() instead of std::end
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:2778
+ return false;
+ ptrdiff_t ValidMaskEnd = std::distance(std::begin(Mask), FirstUndef);
+ // Do not convert it to vnsrl. The pattern is X -1 -1 -1 ..., while X is not
----------------
Mask.begin instead of std::begin
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D137704/new/
https://reviews.llvm.org/D137704
More information about the llvm-commits
mailing list