@@ -1750,9 +1750,9 @@ bool DAGTypeLegalizer::ExpandFloatOperand(SDNode *N, unsigned OpNo) {
1750
1750
case ISD::STRICT_FP_ROUND:
1751
1751
case ISD::FP_ROUND: Res = ExpandFloatOp_FP_ROUND (N); break ;
1752
1752
case ISD::STRICT_FP_TO_SINT:
1753
- case ISD::FP_TO_SINT: Res = ExpandFloatOp_FP_TO_SINT (N); break ;
1754
1753
case ISD::STRICT_FP_TO_UINT:
1755
- case ISD::FP_TO_UINT: Res = ExpandFloatOp_FP_TO_UINT (N); break ;
1754
+ case ISD::FP_TO_SINT:
1755
+ case ISD::FP_TO_UINT: Res = ExpandFloatOp_FP_TO_XINT (N); break ;
1756
1756
case ISD::LROUND: Res = ExpandFloatOp_LROUND (N); break ;
1757
1757
case ISD::LLROUND: Res = ExpandFloatOp_LLROUND (N); break ;
1758
1758
case ISD::LRINT: Res = ExpandFloatOp_LRINT (N); break ;
@@ -1878,38 +1878,21 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_FP_ROUND(SDNode *N) {
1878
1878
return SDValue ();
1879
1879
}
1880
1880
1881
- SDValue DAGTypeLegalizer::ExpandFloatOp_FP_TO_SINT (SDNode *N) {
1882
- EVT RVT = N->getValueType (0 );
1883
- SDLoc dl (N);
1884
-
1885
- bool IsStrict = N->isStrictFPOpcode ();
1886
- SDValue Op = N->getOperand (IsStrict ? 1 : 0 );
1887
- SDValue Chain = IsStrict ? N->getOperand (0 ) : SDValue ();
1888
- RTLIB::Libcall LC = RTLIB::getFPTOSINT (Op.getValueType (), RVT);
1889
- assert (LC != RTLIB::UNKNOWN_LIBCALL && " Unsupported FP_TO_SINT!" );
1890
- TargetLowering::MakeLibCallOptions CallOptions;
1891
- std::pair<SDValue, SDValue> Tmp = TLI.makeLibCall (DAG, LC, RVT, Op,
1892
- CallOptions, dl, Chain);
1893
- if (!IsStrict)
1894
- return Tmp.first ;
1895
-
1896
- ReplaceValueWith (SDValue (N, 1 ), Tmp.second );
1897
- ReplaceValueWith (SDValue (N, 0 ), Tmp.first );
1898
- return SDValue ();
1899
- }
1900
-
1901
- SDValue DAGTypeLegalizer::ExpandFloatOp_FP_TO_UINT (SDNode *N) {
1881
+ SDValue DAGTypeLegalizer::ExpandFloatOp_FP_TO_XINT (SDNode *N) {
1902
1882
EVT RVT = N->getValueType (0 );
1903
1883
SDLoc dl (N);
1904
1884
1905
1885
bool IsStrict = N->isStrictFPOpcode ();
1886
+ bool Signed = N->getOpcode () == ISD::FP_TO_SINT ||
1887
+ N->getOpcode () == ISD::STRICT_FP_TO_SINT;
1906
1888
SDValue Op = N->getOperand (IsStrict ? 1 : 0 );
1907
1889
SDValue Chain = IsStrict ? N->getOperand (0 ) : SDValue ();
1908
- RTLIB::Libcall LC = RTLIB::getFPTOUINT (Op.getValueType (), RVT);
1909
- assert (LC != RTLIB::UNKNOWN_LIBCALL && " Unsupported FP_TO_UINT!" );
1890
+ RTLIB::Libcall LC = Signed ? RTLIB::getFPTOSINT (Op.getValueType (), RVT)
1891
+ : RTLIB::getFPTOUINT (Op.getValueType (), RVT);
1892
+ assert (LC != RTLIB::UNKNOWN_LIBCALL && " Unsupported FP_TO_XINT!" );
1910
1893
TargetLowering::MakeLibCallOptions CallOptions;
1911
- std::pair<SDValue, SDValue> Tmp = TLI. makeLibCall (DAG, LC, RVT, Op,
1912
- CallOptions, dl, Chain);
1894
+ std::pair<SDValue, SDValue> Tmp =
1895
+ TLI. makeLibCall (DAG, LC, RVT, Op, CallOptions, dl, Chain);
1913
1896
if (!IsStrict)
1914
1897
return Tmp.first ;
1915
1898
0 commit comments