[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