Do not change the size of function arguments. PR 1489.
authorDale Johannesen <dalej@apple.com>
Thu, 7 Jun 2007 21:07:15 +0000 (21:07 +0000)
committerDale Johannesen <dalej@apple.com>
Thu, 7 Jun 2007 21:07:15 +0000 (21:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37496 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index ac89b179e13d40a4665ab75213de93bcafc76128..f97ee721515899ab3b92991601a4e699aa633cf1 100644 (file)
@@ -3993,7 +3993,15 @@ TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy,
         Op = DAG.getNode(ExtOp, getTypeToTransformTo(VT), Op);
       } else {
         assert(MVT::isFloatingPoint(VT) && "Not int or FP?");
-        Op = DAG.getNode(ISD::FP_EXTEND, getTypeToTransformTo(VT), Op);
+        // A true promotion would change the size of the argument.
+        // Instead, pretend this is an int.  If FP objects are not
+        // passed the same as ints, the original type should be Legal
+        // and we should not get here.
+        Op = DAG.getNode(ISD::BIT_CONVERT, 
+                         VT==MVT::f32 ? MVT::i32 :
+                         (VT==MVT::f64 ? MVT::i64 :
+                          MVT::Other),
+                         Op);
       }
       Ops.push_back(Op);
       Ops.push_back(DAG.getConstant(Flags, MVT::i32));