Don't create a ridiculous EXTRACT_ELEMENT. PR10563.
authorEli Friedman <eli.friedman@gmail.com>
Tue, 2 Aug 2011 18:38:35 +0000 (18:38 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 2 Aug 2011 18:38:35 +0000 (18:38 +0000)
The testcase looks extremely fragile, so I'm adding an assertion which should catch any cases like this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136711 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAG.cpp
lib/Target/X86/X86ISelLowering.cpp

index 888d8b4ea397cd25d9faeb5bb665e79fcae5e8be..8b353a28b6b44ee0f1ddeb2763c6758ebd342f04 100644 (file)
@@ -2884,6 +2884,7 @@ SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT,
     assert(N2C && (unsigned)N2C->getZExtValue() < 2 && "Bad EXTRACT_ELEMENT!");
     assert(!N1.getValueType().isVector() && !VT.isVector() &&
            (N1.getValueType().isInteger() == VT.isInteger()) &&
+           N1.getValueType() != VT &&
            "Wrong types for EXTRACT_ELEMENT!");
 
     // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding
index 34a6dc3719e0412b13acca359ef163de0a35b24d..5e790f80b64bd0fb1cd817cf93364cb6b122f24d 100644 (file)
@@ -7248,9 +7248,7 @@ SDValue X86TargetLowering::LowerUINT_TO_FP_i32(SDValue Op,
 
   // Load the 32-bit value into an XMM register.
   SDValue Load = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, MVT::v4i32,
-                             DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32,
-                                         Op.getOperand(0),
-                                         DAG.getIntPtrConstant(0)));
+                             Op.getOperand(0));
 
   Load = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::f64,
                      DAG.getNode(ISD::BITCAST, dl, MVT::v2f64, Load),