[SelectionDAG] Fix noop detection for vectors in AssertZext/AssertSext in getNode
authorCraig Topper <craig.topper@intel.com>
Mon, 17 Dec 2018 20:29:13 +0000 (20:29 +0000)
committerCraig Topper <craig.topper@intel.com>
Mon, 17 Dec 2018 20:29:13 +0000 (20:29 +0000)
The assertion type is always supposed to be a scalar type. So if the result VT of the assertion is a vector, we need to get the scalar VT before we can compare them.

Similarly for the assert above it.

I don't have a test case because I don't know of any place we violate this today. A coworker found this while trying to use r347287 on the 6.0 branch without also having r336868

llvm-svn: 349390

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index 6241af1..d69e50d 100644 (file)
@@ -4842,8 +4842,8 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
     assert(!EVT.isVector() &&
            "AssertSExt/AssertZExt type should be the vector element type "
            "rather than the vector type!");
-    assert(EVT.bitsLE(VT) && "Not extending!");
-    if (VT == EVT) return N1; // noop assertion.
+    assert(EVT.bitsLE(VT.getScalarType()) && "Not extending!");
+    if (VT.getScalarType() == EVT) return N1; // noop assertion.
     break;
   }
   case ISD::SIGN_EXTEND_INREG: {