[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