================
@@ -5553,6 +5553,39 @@ void computeKnownFPClass(const Value *V, const APInt
&DemandedElts,
// TODO: Copy inf handling from instructions
break;
+ case Intrinsic::amdgcn_rcp: {
+ KnownFPClass KnownSrc;
+ computeKnownFPClass(II->getArgOperand(0), DemandedElts,
InterestedClasses,
+ KnownSrc, Q, Depth + 1);
+
+ Known.propagateNaN(KnownSrc);
+
+ Type *EltTy = II->getType()->getScalarType();
+
+ // f32 denormal always flushed.
+ if (EltTy->isFloatTy())
+ Known.knownNot(fcSubnormal);
+
+ if (KnownSrc.isKnownNever(fcNegative))
+ Known.knownNot(fcNegative);
+ if (KnownSrc.isKnownNever(fcPositive))
+ Known.knownNot(fcPositive);
+
+ if (KnownSrc.isKnownNeverNegInfinity())
+ Known.knownNot(fcNegZero);
+ if (KnownSrc.isKnownNeverPosInfinity())
+ Known.knownNot(fcPosZero);
----------------
dtcxzyw wrote:
It is incorrect. `rcp(FLT_MAX)` is a denormal value:
https://godbolt.org/z/odoWseG4h
https://github.com/llvm/llvm-project/pull/172490
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits