@@ -5357,7 +5357,9 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
53575357 case Intrinsic::maxnum:
53585358 case Intrinsic::minnum:
53595359 case Intrinsic::minimum:
5360- case Intrinsic::maximum: {
5360+ case Intrinsic::maximum:
5361+ case Intrinsic::minimumnum:
5362+ case Intrinsic::maximumnum: {
53615363 KnownFPClass KnownLHS, KnownRHS;
53625364 computeKnownFPClass (II->getArgOperand (0 ), DemandedElts, InterestedClasses,
53635365 KnownLHS, Depth + 1 , Q);
@@ -5368,10 +5370,12 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
53685370 Known = KnownLHS | KnownRHS;
53695371
53705372 // If either operand is not NaN, the result is not NaN.
5371- if (NeverNaN && (IID == Intrinsic::minnum || IID == Intrinsic::maxnum))
5373+ if (NeverNaN &&
5374+ (IID == Intrinsic::minnum || IID == Intrinsic::maxnum ||
5375+ IID == Intrinsic::minimumnum || IID == Intrinsic::maximumnum))
53725376 Known.knownNot (fcNan);
53735377
5374- if (IID == Intrinsic::maxnum) {
5378+ if (IID == Intrinsic::maxnum || IID == Intrinsic::maximumnum ) {
53755379 // If at least one operand is known to be positive, the result must be
53765380 // positive.
53775381 if ((KnownLHS.cannotBeOrderedLessThanZero () &&
@@ -5385,21 +5389,22 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
53855389 if (KnownLHS.cannotBeOrderedLessThanZero () ||
53865390 KnownRHS.cannotBeOrderedLessThanZero ())
53875391 Known.knownNot (KnownFPClass::OrderedLessThanZeroMask);
5388- } else if (IID == Intrinsic::minnum) {
5392+ } else if (IID == Intrinsic::minnum || IID == Intrinsic::minimumnum ) {
53895393 // If at least one operand is known to be negative, the result must be
53905394 // negative.
53915395 if ((KnownLHS.cannotBeOrderedGreaterThanZero () &&
53925396 KnownLHS.isKnownNeverNaN ()) ||
53935397 (KnownRHS.cannotBeOrderedGreaterThanZero () &&
53945398 KnownRHS.isKnownNeverNaN ()))
53955399 Known.knownNot (KnownFPClass::OrderedGreaterThanZeroMask);
5396- } else {
5400+ } else if (IID == Intrinsic::minimum) {
53975401 // If at least one operand is known to be negative, the result must be
53985402 // negative.
53995403 if (KnownLHS.cannotBeOrderedGreaterThanZero () ||
54005404 KnownRHS.cannotBeOrderedGreaterThanZero ())
54015405 Known.knownNot (KnownFPClass::OrderedGreaterThanZeroMask);
5402- }
5406+ } else
5407+ llvm_unreachable (" unhandled intrinsic" );
54035408
54045409 // Fixup zero handling if denormals could be returned as a zero.
54055410 //
@@ -5427,15 +5432,20 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
54275432 Known.signBitMustBeOne ();
54285433 else
54295434 Known.signBitMustBeZero ();
5430- } else if ((IID == Intrinsic::maximum || IID == Intrinsic::minimum) ||
5435+ } else if ((IID == Intrinsic::maximum || IID == Intrinsic::minimum ||
5436+ IID == Intrinsic::maximumnum ||
5437+ IID == Intrinsic::minimumnum) ||
5438+ // FIXME: Should be using logical zero versions
54315439 ((KnownLHS.isKnownNeverNegZero () ||
54325440 KnownRHS.isKnownNeverPosZero ()) &&
54335441 (KnownLHS.isKnownNeverPosZero () ||
54345442 KnownRHS.isKnownNeverNegZero ()))) {
5435- if ((IID == Intrinsic::maximum || IID == Intrinsic::maxnum) &&
5443+ if ((IID == Intrinsic::maximum || IID == Intrinsic::maximumnum ||
5444+ IID == Intrinsic::maxnum) &&
54365445 (KnownLHS.SignBit == false || KnownRHS.SignBit == false ))
54375446 Known.signBitMustBeZero ();
5438- else if ((IID == Intrinsic::minimum || IID == Intrinsic::minnum) &&
5447+ else if ((IID == Intrinsic::minimum || IID == Intrinsic::minimumnum ||
5448+ IID == Intrinsic::minnum) &&
54395449 (KnownLHS.SignBit == true || KnownRHS.SignBit == true ))
54405450 Known.signBitMustBeOne ();
54415451 }
0 commit comments