diff options
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 23 | 
1 files changed, 9 insertions, 14 deletions
| diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index e1696eb87fb..fa337064ab8 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -1547,10 +1547,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {          if (Tmp2.getValueType() != MVT::Vector) {            SDOperand Lo, Hi;            ExpandOp(Tmp2, Lo, Hi); -          if (Hi.Val) -            Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi,Tmp3); -          else -            Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3); +          Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi, Tmp3);            Result = LegalizeOp(Result);          } else {            SDNode *InVal = Tmp2.Val; @@ -1612,10 +1609,8 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {            ExpandOp(Node->getOperand(i), Lo, Hi);            NewValues.push_back(Lo);            NewValues.push_back(Node->getOperand(i+1)); -          if (Hi.Val) { -            NewValues.push_back(Hi); -            NewValues.push_back(Node->getOperand(i+1)); -          } +          NewValues.push_back(Hi); +          NewValues.push_back(Node->getOperand(i+1));            break;          }          case Promote: @@ -4572,10 +4567,12 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){        Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp), DAG);      } +    MVT::ValueType NVT = Node->getValueType(0);      // f32 / f64 must be expanded to i32 / i64. -    if (VT == MVT::f32 || VT == MVT::f64) { -      Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node->getOperand(0)); -      Hi = SDOperand(); +    if (NVT == MVT::f32 || NVT == MVT::f64) { +      Lo = DAG.getNode(ISD::BIT_CONVERT, TLI.getTypeToTransformTo(NVT), +                       Node->getOperand(0)); +      Hi = DAG.getConstant(0, TLI.getTypeToTransformTo(NVT));        break;      } @@ -4878,9 +4875,7 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){    // is a type that requires multi-step expansion.    if (getTypeAction(NVT) != Expand && NVT != MVT::isVoid) {      Lo = LegalizeOp(Lo); -    if (Hi.Val) -      // Don't legalize the high part if it is expanded to a single node. -      Hi = LegalizeOp(Hi); +    Hi = LegalizeOp(Hi);    }    // Remember in a map if the values will be reused later. | 

