diff options
author | Sanjay Patel <spatel@rotateright.com> | 2019-05-07 22:58:31 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2019-05-07 22:58:31 +0000 |
commit | e088d03b9c8b25589bbf35545399ae28a34df182 (patch) | |
tree | ee6008603c4b897a1b38cd1d5990b3cf413f32b9 /llvm/lib/Analysis/ValueTracking.cpp | |
parent | 0d8ae1e3435accab5130d71dfc872507043ca4f1 (diff) | |
download | bcm5719-llvm-e088d03b9c8b25589bbf35545399ae28a34df182.tar.gz bcm5719-llvm-e088d03b9c8b25589bbf35545399ae28a34df182.zip |
[ValueTracking] add logic for known-never-nan with minnum/maxnum
From the LangRef: "Returns NaN only if both operands are NaN."
llvm-svn: 360206
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
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; } |