compile: double test() {}
authorChris Lattner <sabre@nondot.org>
Tue, 11 Mar 2008 06:21:08 +0000 (06:21 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 11 Mar 2008 06:21:08 +0000 (06:21 +0000)
into:

_test:
fldz
ret

instead of:

_test:
subl $12, %esp
#IMPLICIT_DEF %xmm0
movsd %xmm0, (%esp)
fldl (%esp)
addl $12, %esp
ret

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

lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index f81d80ebe7969eec6aa14c6f6129f067a15d67d4..59fd79650a0f36131c0753351c52ea6187e02a6e 100644 (file)
@@ -1825,8 +1825,10 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
     assert(MVT::isFloatingPoint(VT) &&
            MVT::isFloatingPoint(Operand.getValueType()) && "Invalid FP cast!");
     if (Operand.getValueType() == VT) return Operand;  // noop conversion.
+    if (Operand.getOpcode() == ISD::UNDEF)
+      return getNode(ISD::UNDEF, VT);
     break;
-    case ISD::SIGN_EXTEND:
+  case ISD::SIGN_EXTEND:
     assert(MVT::isInteger(VT) && MVT::isInteger(Operand.getValueType()) &&
            "Invalid SIGN_EXTEND!");
     if (Operand.getValueType() == VT) return Operand;   // noop extension