[PATCH] D73132: Allow combining of extract_subvector to extract element

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 22 00:24:13 PST 2020


lebedev.ri accepted this revision.
lebedev.ri added reviewers: spatel, deadalnix.
lebedev.ri added a comment.
This revision is now accepted and ready to land.

This LG to me.



================
Comment at: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:18561-18567
+        EVT ScalarVT = SrcVT.getScalarType();
+        if ((N->getConstantOperandVal(1) % DestSrcRatio) == 0) {
           SDLoc DL(N);
-          SDValue NewIndex = DAG.getVectorIdxConstant(IndexValScaled, DL);
-          SDValue NewExtract = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, NewExtVT,
-                                           V.getOperand(0), NewIndex);
-          return DAG.getBitcast(NVT, NewExtract);
+          unsigned IndexValScaled = N->getConstantOperandVal(1) / DestSrcRatio;
+          EVT NewExtVT = EVT::getVectorVT(*DAG.getContext(),
+                                          ScalarVT, NewExtNumElts);
+          if (TLI.isOperationLegalOrCustom(ISD::EXTRACT_SUBVECTOR, NewExtVT)) {
----------------
Can you precommit this NFC part?


================
Comment at: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:18573-18574
+          }
+          if (NewExtNumElts == 1 &&
+              TLI.isOperationLegalOrCustom(ISD::EXTRACT_VECTOR_ELT, ScalarVT)) {
+            SDValue NewIndex = DAG.getVectorIdxConstant(IndexValScaled, DL);
----------------
I'm guessing the order doesn't matter?
If `ISD::EXTRACT_VECTOR_ELT` is legal, we'll transform
single-element `ISD::EXTRACT_SUBVECTOR` into `ISD::EXTRACT_VECTOR_ELT` later anyway?



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

https://reviews.llvm.org/D73132





More information about the llvm-commits mailing list