[llvm] Support STRICT_UINT_TO_FP and STRICT_SINT_TO_FP (PR #102503)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 5 17:25:11 PDT 2024
================
@@ -6851,30 +6855,35 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
return DAG.getNode(ISD::FP_EXTEND, DL, VT, Res);
return Res;
}
+ case ISD::STRICT_FP_TO_FP16:
case ISD::FP_TO_FP16: {
// Custom lower to ensure the libcall return is passed in an FPR on hard
// float ABIs.
assert(Subtarget.hasStdExtFOrZfinx() && "Unexpected custom legalisation");
SDLoc DL(Op);
MakeLibCallOptions CallOptions;
- RTLIB::Libcall LC =
- RTLIB::getFPROUND(Op.getOperand(0).getValueType(), MVT::f16);
- SDValue Res =
- makeLibCall(DAG, LC, MVT::f32, Op.getOperand(0), CallOptions, DL).first;
+ bool IsStrict = Op->isStrictFPOpcode();
+ SDValue Op0 = IsStrict ? Op.getOperand(1) : Op.getOperand(0);
+ RTLIB::Libcall LC = RTLIB::getFPROUND(Op0.getValueType(), MVT::f16);
+ SDValue Res = makeLibCall(DAG, LC, MVT::f32, Op0, CallOptions, DL).first;
----------------
topperc wrote:
I think we need to pass the chain for the strict case after `DL`
https://github.com/llvm/llvm-project/pull/102503
More information about the llvm-commits
mailing list