From e088d03b9c8b25589bbf35545399ae28a34df182 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 7 May 2019 22:58:31 +0000 Subject: [ValueTracking] add logic for known-never-nan with minnum/maxnum From the LangRef: "Returns NaN only if both operands are NaN." llvm-svn: 360206 --- llvm/lib/Analysis/ValueTracking.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'llvm/lib/Analysis/ValueTracking.cpp') diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 7c16b21c928..54575441b71 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -3136,6 +3136,11 @@ bool llvm::isKnownNeverNaN(const Value *V, const TargetLibraryInfo *TLI, case Intrinsic::sqrt: return isKnownNeverNaN(II->getArgOperand(0), TLI, Depth + 1) && CannotBeOrderedLessThanZero(II->getArgOperand(0), TLI); + case Intrinsic::minnum: + case Intrinsic::maxnum: + // If either operand is not NaN, the result is not NaN. + return isKnownNeverNaN(II->getArgOperand(0), TLI, Depth + 1) || + isKnownNeverNaN(II->getArgOperand(1), TLI, Depth + 1); default: return false; } -- cgit v1.2.3