From 4eebb60f843e0aa67b62f3b8643101bc0e39531d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 20 Jan 2006 18:38:32 +0000 Subject: [PATCH] If the target doesn't support f32 natively, insert the FP_EXTEND in target-indep 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 | 5 +++-- lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 2cb6be59a21..8d5c2d030d5 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -3377,7 +3377,8 @@ bool SelectionDAGLegalize::ExpandShift(unsigned Opc, SDOperand Op,SDOperand Amt, /// Found. static void FindLatestCallSeqStart(SDNode *Node, SDNode *&Found, std::set &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 &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 diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index f977a734842..02ae7108aee 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -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!