[llvm] [DAG] Add ISD::FSQRT handling to computeKnownFPClass (PR #213620)
Varad Rahul Kamthe via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 4 01:54:19 PDT 2026
================
@@ -6191,6 +6191,25 @@ KnownFPClass SelectionDAG::computeKnownFPClass(SDValue Op,
Known.fneg();
break;
}
+ case ISD::FSQRT: {
+ FPClassTest InterestedSrcs = InterestedClasses;
+ if (InterestedClasses & fcNan)
+ InterestedSrcs |= KnownFPClass::OrderedLessThanZeroMask;
+
+ KnownFPClass KnownSrc = computeKnownFPClass(Op.getOperand(0), DemandedElts,
+ InterestedSrcs, Depth + 1);
+
+ const fltSemantics &FltSem =
+ Op.getValueType().getScalarType().getFltSemantics();
+ DenormalMode Mode = getMachineFunction().getDenormalMode(FltSem);
+
+ Known = KnownFPClass::sqrt(KnownSrc, Mode);
+
+ if (Op->getFlags().hasNoNaNs())
----------------
varadk27 wrote:
Hi @arsenm!
Pushed one more update -- this generic change also improves an existing test: AMDGPU's `fsqrt.f32.ll` has a degenerate-value guard (checks `fcZero|fcPosInf`) that now correctly narrows to just `fcZero` for ninf-flagged sqrt calls, since `computeKnownFPClass` can now prove +inf is impossible there.
Regenerated its CHECK lines to match. Full check-llvm is clean.
https://github.com/llvm/llvm-project/pull/213620
More information about the llvm-commits
mailing list