diff options
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp | 72 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h | 3 | 
2 files changed, 31 insertions, 44 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp index 28031e757da..295a32326f7 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp @@ -1698,8 +1698,8 @@ void DAGTypeLegalizer::ExpandIntegerResult(SDNode *N, unsigned ResNo) {    case ISD::FLT_ROUNDS_: ExpandIntRes_FLT_ROUNDS(N, Lo, Hi); break;    case ISD::FP_TO_SINT:  ExpandIntRes_FP_TO_SINT(N, Lo, Hi); break;    case ISD::FP_TO_UINT:  ExpandIntRes_FP_TO_UINT(N, Lo, Hi); break; -  case ISD::LLROUND:     ExpandIntRes_LLROUND(N, Lo, Hi); break; -  case ISD::LLRINT:      ExpandIntRes_LLRINT(N, Lo, Hi); break; +  case ISD::LLROUND: +  case ISD::LLRINT:      ExpandIntRes_LLROUND_LLRINT(N, Lo, Hi); break;    case ISD::LOAD:        ExpandIntRes_LOAD(cast<LoadSDNode>(N), Lo, Hi); break;    case ISD::MUL:         ExpandIntRes_MUL(N, Lo, Hi); break;    case ISD::READCYCLECOUNTER: ExpandIntRes_READCYCLECOUNTER(N, Lo, Hi); break; @@ -2584,49 +2584,37 @@ void DAGTypeLegalizer::ExpandIntRes_FP_TO_UINT(SDNode *N, SDValue &Lo,                 Lo, Hi);  } -void DAGTypeLegalizer::ExpandIntRes_LLROUND(SDNode *N, SDValue &Lo, -                                            SDValue &Hi) { -  RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL; +void DAGTypeLegalizer::ExpandIntRes_LLROUND_LLRINT(SDNode *N, SDValue &Lo, +                                                   SDValue &Hi) {    EVT VT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy; -  if (VT == MVT::f32) -    LC = RTLIB::LLROUND_F32; -  else if (VT == MVT::f64) -    LC = RTLIB::LLROUND_F64; -  else if (VT == MVT::f80) -    LC = RTLIB::LLROUND_F80; -  else if (VT == MVT::f128) -    LC = RTLIB::LLROUND_F128; -  else if (VT == MVT::ppcf128) -    LC = RTLIB::LLROUND_PPCF128; -  assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected llround input type!"); - -  SDValue Op = N->getOperand(0); -  if (getTypeAction(Op.getValueType()) == TargetLowering::TypePromoteFloat) -    Op = GetPromotedFloat(Op); -  SDLoc dl(N); -  EVT RetVT = N->getValueType(0); -  TargetLowering::MakeLibCallOptions CallOptions; -  CallOptions.setSExt(true); -  SplitInteger(TLI.makeLibCall(DAG, LC, RetVT, Op, CallOptions, dl).first, -               Lo, Hi); -} - -void DAGTypeLegalizer::ExpandIntRes_LLRINT(SDNode *N, SDValue &Lo, -                                            SDValue &Hi) {    RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL; -  EVT VT = N->getOperand(0).getValueType().getSimpleVT().SimpleTy; -  if (VT == MVT::f32) -    LC = RTLIB::LLRINT_F32; -  else if (VT == MVT::f64) -    LC = RTLIB::LLRINT_F64; -  else if (VT == MVT::f80) -    LC = RTLIB::LLRINT_F80; -  else if (VT == MVT::f128) -    LC = RTLIB::LLRINT_F128; -  else if (VT == MVT::ppcf128) -    LC = RTLIB::LLRINT_PPCF128; -  assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected llrint input type!"); +  if (N->getOpcode() == ISD::LLROUND) { +    if (VT == MVT::f32) +      LC = RTLIB::LLROUND_F32; +    else if (VT == MVT::f64) +      LC = RTLIB::LLROUND_F64; +    else if (VT == MVT::f80) +      LC = RTLIB::LLROUND_F80; +    else if (VT == MVT::f128) +      LC = RTLIB::LLROUND_F128; +    else if (VT == MVT::ppcf128) +      LC = RTLIB::LLROUND_PPCF128; +    assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected llround input type!"); +  } else if (N->getOpcode() == ISD::LLRINT) { +    if (VT == MVT::f32) +      LC = RTLIB::LLRINT_F32; +    else if (VT == MVT::f64) +      LC = RTLIB::LLRINT_F64; +    else if (VT == MVT::f80) +      LC = RTLIB::LLRINT_F80; +    else if (VT == MVT::f128) +      LC = RTLIB::LLRINT_F128; +    else if (VT == MVT::ppcf128) +      LC = RTLIB::LLRINT_PPCF128; +    assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected llrint input type!"); +  } else +    llvm_unreachable("Unexpected opcode!");    SDValue Op = N->getOperand(0);    if (getTypeAction(Op.getValueType()) == TargetLowering::TypePromoteFloat) diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h index 77216647efb..da966ea55dc 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h @@ -411,8 +411,7 @@ private:    void ExpandIntRes_FLT_ROUNDS        (SDNode *N, SDValue &Lo, SDValue &Hi);    void ExpandIntRes_FP_TO_SINT        (SDNode *N, SDValue &Lo, SDValue &Hi);    void ExpandIntRes_FP_TO_UINT        (SDNode *N, SDValue &Lo, SDValue &Hi); -  void ExpandIntRes_LLROUND           (SDNode *N, SDValue &Lo, SDValue &Hi); -  void ExpandIntRes_LLRINT            (SDNode *N, SDValue &Lo, SDValue &Hi); +  void ExpandIntRes_LLROUND_LLRINT    (SDNode *N, SDValue &Lo, SDValue &Hi);    void ExpandIntRes_Logical           (SDNode *N, SDValue &Lo, SDValue &Hi);    void ExpandIntRes_ADDSUB            (SDNode *N, SDValue &Lo, SDValue &Hi);  | 

