]> granicus.if.org Git - llvm/commitdiff
[DAGCombiner] When combining EXTRACT_SUBVECTOR of a BUILD_VECTOR, make sure we don...
authorCraig Topper <craig.topper@intel.com>
Wed, 6 Sep 2017 06:50:03 +0000 (06:50 +0000)
committerCraig Topper <craig.topper@intel.com>
Wed, 6 Sep 2017 06:50:03 +0000 (06:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312621 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index ae923e8ac07ebe9b8be8df2827b81c9a1f14efaf..c068e1df83626156e54bfb61ca119c1a79c3a434 100644 (file)
@@ -15180,8 +15180,9 @@ SDValue DAGCombiner::visitEXTRACT_SUBVECTOR(SDNode* N) {
         unsigned NumElems = ExtractSize / EltSize;
         EVT ExtractVT = EVT::getVectorVT(*DAG.getContext(),
                                          InVT.getVectorElementType(), NumElems);
-        if (!LegalOperations ||
-            TLI.isOperationLegal(ISD::BUILD_VECTOR, ExtractVT)) {
+        if ((!LegalOperations ||
+             TLI.isOperationLegal(ISD::BUILD_VECTOR, ExtractVT)) &&
+            (!LegalTypes || TLI.isTypeLegal(ExtractVT))) {
           unsigned IdxVal = (Idx->getZExtValue() * NVT.getScalarSizeInBits()) /
                             EltSize;