Skip to content

Commit 38b4442

Browse files
committed
[NFC] [Legalizer] Use common method for expanding fp-to-int operands
Reviewed By: RKSimon, steven.zhang Differential Revision: https://reviews.llvm.org/D92481
1 parent c36f31c commit 38b4442

File tree

2 files changed

+11
-29
lines changed

2 files changed

+11
-29
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,9 +1750,9 @@ bool DAGTypeLegalizer::ExpandFloatOperand(SDNode *N, unsigned OpNo) {
17501750
case ISD::STRICT_FP_ROUND:
17511751
case ISD::FP_ROUND: Res = ExpandFloatOp_FP_ROUND(N); break;
17521752
case ISD::STRICT_FP_TO_SINT:
1753-
case ISD::FP_TO_SINT: Res = ExpandFloatOp_FP_TO_SINT(N); break;
17541753
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;
17561756
case ISD::LROUND: Res = ExpandFloatOp_LROUND(N); break;
17571757
case ISD::LLROUND: Res = ExpandFloatOp_LLROUND(N); break;
17581758
case ISD::LRINT: Res = ExpandFloatOp_LRINT(N); break;
@@ -1878,38 +1878,21 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_FP_ROUND(SDNode *N) {
18781878
return SDValue();
18791879
}
18801880

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) {
19021882
EVT RVT = N->getValueType(0);
19031883
SDLoc dl(N);
19041884

19051885
bool IsStrict = N->isStrictFPOpcode();
1886+
bool Signed = N->getOpcode() == ISD::FP_TO_SINT ||
1887+
N->getOpcode() == ISD::STRICT_FP_TO_SINT;
19061888
SDValue Op = N->getOperand(IsStrict ? 1 : 0);
19071889
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!");
19101893
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);
19131896
if (!IsStrict)
19141897
return Tmp.first;
19151898

llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,8 +629,7 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
629629
SDValue ExpandFloatOp_BR_CC(SDNode *N);
630630
SDValue ExpandFloatOp_FCOPYSIGN(SDNode *N);
631631
SDValue ExpandFloatOp_FP_ROUND(SDNode *N);
632-
SDValue ExpandFloatOp_FP_TO_SINT(SDNode *N);
633-
SDValue ExpandFloatOp_FP_TO_UINT(SDNode *N);
632+
SDValue ExpandFloatOp_FP_TO_XINT(SDNode *N);
634633
SDValue ExpandFloatOp_LROUND(SDNode *N);
635634
SDValue ExpandFloatOp_LLROUND(SDNode *N);
636635
SDValue ExpandFloatOp_LRINT(SDNode *N);

0 commit comments

Comments
 (0)