[llvm] InstCombine: Handle minimumnum/maximumnum in SimplifyDemandedFPClass (PR #173977)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 10 05:20:30 PST 2026
================
@@ -2279,26 +2279,35 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Value *V,
break;
}
case Intrinsic::maximum:
- case Intrinsic::minimum: {
- KnownFPClass KnownLHS, KnownRHS;
+ case Intrinsic::minimum:
+ case Intrinsic::maximumnum:
+ case Intrinsic::minimumnum: {
+ const bool PropagateNaN =
+ IID == Intrinsic::maximum || IID == Intrinsic::minimum;
// We can't tell much based on the demanded result without inspecting the
// operands (e.g., a known-positive result could have been clamped), but
// we can still prune known-nan inputs.
- FPClassTest SrcDemandedMask = DemandedMask | ~fcNan;
+ FPClassTest SrcDemandedMask =
+ PropagateNaN ? DemandedMask | ~fcNan : fcAllFlags;
+ KnownFPClass KnownLHS, KnownRHS;
if (SimplifyDemandedFPClass(CI, 1, SrcDemandedMask, KnownRHS,
Depth + 1) ||
SimplifyDemandedFPClass(CI, 0, SrcDemandedMask, KnownLHS, Depth + 1))
return I;
/// Propagate nnan-ness to simplify edge case checks.
- if ((DemandedMask & fcNan) == fcNone) {
+ if (PropagateNaN && (DemandedMask & fcNan) == fcNone) {
KnownLHS.knownNot(fcNan);
KnownRHS.knownNot(fcNan);
}
+ KnownFPClass::MinMaxKind OpKind;
+
if (IID == Intrinsic::maximum) {
+ OpKind = KnownFPClass::MinMaxKind::maximum;
----------------
dtcxzyw wrote:
Use switch instead.
https://github.com/llvm/llvm-project/pull/173977
More information about the llvm-commits
mailing list