[NFC][DAG] `combineShuffleToVectorExtend()`: check that the type is legal first
authorRoman Lebedev <lebedev.ri@gmail.com>
Sun, 25 Dec 2022 18:20:43 +0000 (21:20 +0300)
committerRoman Lebedev <lebedev.ri@gmail.com>
Sun, 25 Dec 2022 22:03:59 +0000 (01:03 +0300)
There is no point in doing any of the potentially-costly matching
if we will inevitably give up anyway.

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index d4a03ec..7b64fdd 100644 (file)
@@ -22619,19 +22619,21 @@ static SDValue combineShuffleToVectorExtend(ShuffleVectorSDNode *SVN,
     // Check for non power of 2 vector sizes
     if (NumElts % Scale != 0)
       continue;
-    if (!isAnyExtend(Scale))
-      continue;
 
     EVT OutSVT = EVT::getIntegerVT(*DAG.getContext(), EltSizeInBits * Scale);
     EVT OutVT = EVT::getVectorVT(*DAG.getContext(), OutSVT, NumElts / Scale);
     // Never create an illegal type. Only create unsupported operations if we
     // are pre-legalization.
-    if (TLI.isTypeLegal(OutVT))
-      if (!LegalOperations ||
-          TLI.isOperationLegalOrCustom(ISD::ANY_EXTEND_VECTOR_INREG, OutVT))
-        return DAG.getBitcast(VT,
-                              DAG.getNode(ISD::ANY_EXTEND_VECTOR_INREG,
-                                          SDLoc(SVN), OutVT, N0));
+    if (!TLI.isTypeLegal(OutVT))
+      continue;
+
+    if (!isAnyExtend(Scale))
+      continue;
+
+    if (!LegalOperations ||
+        TLI.isOperationLegalOrCustom(ISD::ANY_EXTEND_VECTOR_INREG, OutVT))
+      return DAG.getBitcast(
+          VT, DAG.getNode(ISD::ANY_EXTEND_VECTOR_INREG, SDLoc(SVN), OutVT, N0));
   }
 
   return SDValue();