[PATCH] D117389: [RISCV] Improve extract_vector_elt for fixed mask registers.

Craig Topper via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Jan 15 11:41:18 PST 2022


craig.topper added inline comments.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:4100
+    if (VecVT.isFixedLengthVector()) {
+      auto Nums = VecVT.getVectorMinNumElements();
+      if (Nums >= 8) {
----------------
Use `unsigned` instead of auto


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:4102
+      if (Nums >= 8) {
+        MVT WideEleVT;
+        unsigned WidenVecLen;
----------------
Ele->Elt would be a more common shortening.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:4106
+        SDValue ExtractBitIdx;
+        if (Nums <= XLenVT.getScalarSizeInBits()) {
+          WideEleVT = MVT::getIntegerVT(Nums);
----------------
getSizeBits(). XLenVT is always scalar.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:4113
+          WideEleVT = XLenVT;
+          WidenVecLen = Nums / XLenVT.getScalarSizeInBits();
+          ExtractElementIdx =
----------------
getSizeBits(). XLenVT is always scalar.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:4116
+              DAG.getNode(ISD::SRL, DL, XLenVT, Idx,
+                          DAG.getConstant(Log2_64(XLenVT.getScalarSizeInBits()),
+                                          DL, XLenVT));
----------------
getSizeBits(). XLenVT is always scalar.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:4118
+                                          DL, XLenVT));
+          ExtractBitIdx = DAG.getNode(
+              ISD::SHL, DL, XLenVT, Idx,
----------------
This shift pair can be an AND right?


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:4133
+            ExtractBitIdx);
+        MVT WideVT = MVT::getVectorVT(WideEleVT, WidenVecLen, false);
+        Vec = DAG.getNode(ISD::BITCAST, DL, WideVT, Vec);
----------------
I don't think you need to pass `false` here.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:4135
+        Vec = DAG.getNode(ISD::BITCAST, DL, WideVT, Vec);
+        auto ExtractEle = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, XLenVT, Vec,
+                                      ExtractElementIdx);
----------------
Use SDValue instead of auto.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D117389/new/

https://reviews.llvm.org/D117389



More information about the llvm-commits mailing list