[PATCH] D149715: IR: Add llvm.frexp intrinsic
Serge Pavlov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon May 22 23:08:39 PDT 2023
sepavloff added inline comments.
================
Comment at: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:2508
+
+ SDValue SmallestNormalizedMask = DAG.getConstant(
+ APFloat::getSmallestNormalized(FltSem, false).bitcastToAPInt(), dl,
----------------
Thos variable is not a mask, it is just a value.
================
Comment at: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:2543
+
+ SDValue AddBiggestNegNormal =
+ DAG.getNode(ISD::ADD, dl, AsIntVT, Abs, NegSmallestNormalizedInt);
----------------
Look like the name is wrong. It states about biggest normal, but actually the smallest is added.
================
Comment at: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:2545
+ DAG.getNode(ISD::ADD, dl, AsIntVT, Abs, NegSmallestNormalizedInt);
+ SDValue NonFiniteOrZero = DAG.getSetCC(dl, SetCCVT, AddBiggestNegNormal,
+ NegSmallestNormalizedInt, ISD::SETULE);
----------------
Is this correct?
The check is `x + SNN <= SNN` in unsigned wrapping math. It holds if `x` represents zero or denormal value, so essentially it checks for zero or denormal, no?
================
Comment at: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:2558
+
+ SDValue ExpMaskScaled =
+ DAG.getNode(ISD::AND, dl, AsIntVT, ScaledAsInt, ExpMask);
----------------
This value is used only `SELECT`, which is then shifted right. Can it be dropped?
================
Comment at: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:5202
+ DAG.getNode(ISD::FP_ROUND, dl, OVT, Tmp2,
+ DAG.getIntPtrConstant(0, dl, /*isTarget=*/true)));
+
----------------
Can we use 1 for the second operand? The value produced by FFREXP should not add extra bits to mantissa.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D149715/new/
https://reviews.llvm.org/D149715
More information about the llvm-commits
mailing list