More X86 floating point patterns.
[oota-llvm.git] / lib / Target / X86 / X86ISelLowering.cpp
index 15410a56dfe7836ac5038ca767710967ae13798d..b419f31d47abe68d349686d9951270fe3b7b3ba9 100644 (file)
@@ -227,8 +227,6 @@ SDOperand X86TargetLowering::LowerReturnTo(SDOperand Chain, SDOperand Op,
       break;
     }
     case MVT::f32:
-      assert(X86ScalarSSE && "MVT::f32 only legal with scalar sse fp");
-      // Fallthrough intended
     case MVT::f64:
       if (!X86ScalarSSE) {
         std::vector<MVT::ValueType> Tys;
@@ -236,6 +234,8 @@ SDOperand X86TargetLowering::LowerReturnTo(SDOperand Chain, SDOperand Op,
         Tys.push_back(MVT::Flag);
         std::vector<SDOperand> Ops;
         Ops.push_back(Chain);
+        if (OpVT == MVT::f32)
+          Op = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Op);
         Ops.push_back(Op);
         Copy = DAG.getNode(X86ISD::FP_SET_RESULT, Tys, Ops);
       } else {
@@ -1053,7 +1053,7 @@ SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) {
     return DAG.getNode(X86ISD::BRCOND, Op.getValueType(),
                        Op.getOperand(0), Op.getOperand(2), CC, Cond);
   }
-  case ISD::GlobalAddress:
+  case ISD::GlobalAddress: {
     GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
     SDOperand GVOp = DAG.getTargetGlobalAddress(GV, getPointerTy());
     // For Darwin, external and weak symbols are indirect, so we want to load
@@ -1069,6 +1069,7 @@ SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) {
       return GVOp;
     break;
   }
+  }
 }
 
 const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {