diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2016-01-06 19:23:35 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2016-01-06 19:23:35 +0000 |
| commit | cddcd7256c86a4ea787233745cd69d3809d3b7a3 (patch) | |
| tree | 68a4cd747c893863f416f835c5037c18b1143698 /llvm/lib/Transforms | |
| parent | b2a8b353497766b8d7db9e3935a51afd2143088b (diff) | |
| download | bcm5719-llvm-cddcd7256c86a4ea787233745cd69d3809d3b7a3.tar.gz bcm5719-llvm-cddcd7256c86a4ea787233745cd69d3809d3b7a3.zip | |
[LibCallSimplifier] use instruction-level fast-math-flags for tan/atan transform
llvm-svn: 256964
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp index dc5fee523d4..563b65ce5d3 100644 --- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -1457,6 +1457,7 @@ Value *LibCallSimplifier::optimizeSqrt(CallInst *CI, IRBuilder<> &B) { return Ret; } +// TODO: Generalize to handle any trig function and its inverse. Value *LibCallSimplifier::optimizeTan(CallInst *CI, IRBuilder<> &B) { Function *Callee = CI->getCalledFunction(); Value *Ret = nullptr; @@ -1471,13 +1472,15 @@ Value *LibCallSimplifier::optimizeTan(CallInst *CI, IRBuilder<> &B) { !FT->getParamType(0)->isFloatingPointTy()) return Ret; - if (!canUseUnsafeFPMath(CI->getParent()->getParent())) - return Ret; Value *Op1 = CI->getArgOperand(0); auto *OpC = dyn_cast<CallInst>(Op1); if (!OpC) return Ret; + // Both calls must allow unsafe optimizations in order to remove them. + if (!CI->hasUnsafeAlgebra() || !OpC->hasUnsafeAlgebra()) + return Ret; + // tan(atan(x)) -> x // tanf(atanf(x)) -> x // tanl(atanl(x)) -> x |

