If the target doesn't support f32 natively, insert the FP_EXTEND in target-indep
authorChris Lattner <sabre@nondot.org>
Fri, 20 Jan 2006 18:38:32 +0000 (18:38 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 20 Jan 2006 18:38:32 +0000 (18:38 +0000)
code, so that the LowerReturn code doesn't have to handle it.

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

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index 2cb6be59a21721fea883faba3efdc74211570abc..8d5c2d030d5214f8bb56289f9f1a222e8871ccde 100644 (file)
@@ -3377,7 +3377,8 @@ bool SelectionDAGLegalize::ExpandShift(unsigned Opc, SDOperand Op,SDOperand Amt,
 /// Found.
 static void FindLatestCallSeqStart(SDNode *Node, SDNode *&Found,
                                    std::set<SDNode*> &Visited) {
-  if (Node->getNodeDepth() <= Found->getNodeDepth() ||
+  if (/*Node->getNodeDepth() <= Found->getNodeDepth() ||*/
+      Node->getNumOperands() == 0 ||
       !Visited.insert(Node).second) return;
   
   // If we found an CALLSEQ_START, we already know this node occurs later
@@ -3404,7 +3405,7 @@ static void FindLatestCallSeqStart(SDNode *Node, SDNode *&Found,
 /// than Found.
 static void FindEarliestCallSeqEnd(SDNode *Node, SDNode *&Found,
                                    std::set<SDNode*> &Visited) {
-  if ((Found && Node->getNodeDepth() >= Found->getNodeDepth()) ||
+  if (/*(Found && Node->getNodeDepth() >= Found->getNodeDepth()) ||*/
       !Visited.insert(Node).second) return;
 
   // If we found an CALLSEQ_END, we already know this node occurs earlier
index f977a73484239d0d4d1f48a6ede8f830a72e2cfe..02ae7108aeea8642887e3a3146904ecfc9ac8bf5 100644 (file)
@@ -490,6 +490,10 @@ void SelectionDAGLowering::visitRet(ReturnInst &I) {
       Op1 = DAG.getNode(ISD::ZERO_EXTEND, TmpVT, Op1);
     break;
   case MVT::f32:
+    // If this is a machine where f32 is promoted to f64, do so now.
+    if (TLI.getTypeAction(MVT::f32) == TargetLowering::Promote)
+      Op1 = DAG.getNode(ISD::FP_EXTEND, TLI.getTypeToTransformTo(MVT::f32),Op1);
+    break;
   case MVT::i64:
   case MVT::f64:
     break; // No extension needed!