[llvm] [SelectionDAG] Add expansion for llvm.modf intrinsic (PR #179434)
Alex Wang via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 4 08:48:06 PST 2026
================
@@ -2771,6 +2772,34 @@ SDValue SelectionDAGLegalize::expandFrexp(SDNode *Node) const {
return DAG.getMergeValues({Result0, Result1}, dl);
}
+SDValue SelectionDAGLegalize::expandModf(SDNode *Node) const {
+ SDLoc dl(Node);
+ SDValue Val = Node->getOperand(0);
+ EVT VT = Val.getValueType();
+ SDNodeFlags Flags = Node->getFlags();
+
+ SDValue IntPart = DAG.getNode(ISD::FTRUNC, dl, VT, Val, Flags);
+ SDValue FracPart = DAG.getNode(ISD::FSUB, dl, VT, Val, IntPart, Flags);
+
+ SDValue FracToUse;
+ if (Flags.hasNoInfs()) {
+ FracToUse = FracPart;
+ } else {
+ SDValue Abs = DAG.getNode(ISD::FABS, dl, VT, Val, Flags);
+ SDValue Inf =
+ DAG.getConstantFP(APFloat::getInf(VT.getFltSemantics()), dl, VT);
+ EVT SetCCVT =
+ TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT);
+ SDValue IsInf = DAG.getSetCC(dl, SetCCVT, Abs, Inf, ISD::SETOEQ);
+ SDValue Zero = DAG.getConstantFP(0.0, dl, VT);
+ FracToUse = DAG.getNode(ISD::SELECT, dl, VT, IsInf, Zero, FracPart);
----------------
aeft wrote:
Thanks! Updated.
https://github.com/llvm/llvm-project/pull/179434
More information about the llvm-commits
mailing list