================
@@ -2244,6 +2244,37 @@ Value
*InstCombinerImpl::SimplifyDemandedUseFPClass(Value *V,
FPClassTest ValidResults = DemandedMask & Known.KnownFPClasses;
return getFPClassConstant(VTy, ValidResults, /*IsCanonicalizing=*/true);
}
+ case Intrinsic::sqrt: {
+ FPClassTest DemandedSrcMask =
+ DemandedMask & (fcNegZero | fcPositive | fcNan);
+
+ if (DemandedMask & fcNan)
+ DemandedSrcMask |= (fcNegative & ~fcNegZero);
+
+ KnownFPClass KnownSrc;
+ if (SimplifyDemandedFPClass(I, 0, DemandedSrcMask, KnownSrc, Depth + 1))
+ return I;
+
+ Type *EltTy = VTy->getScalarType();
+ DenormalMode Mode = F.getDenormalMode(EltTy->getFltSemantics());
+
+ // sqrt(-x) = nan, but be careful of negative subnormals flushed to 0.
+ if (KnownSrc.isKnownNever(fcPositive) &&
+ KnownSrc.isKnownNeverLogicalZero(Mode))
+ return ConstantFP::getQNaN(VTy);
+
+ Known = KnownFPClass::sqrt(KnownSrc, Mode);
+ FPClassTest ValidResults = DemandedMask & Known.KnownFPClasses;
+
+ if (ValidResults == fcZero) {
+ Value *Copysign = Builder.CreateCopySign(ConstantFP::getZero(VTy),
----------------
dtcxzyw wrote:
Can we simplify sqrt into +0 when nsz is available?
https://github.com/llvm/llvm-project/pull/173883
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits