diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-04 22:49:03 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-04 22:49:03 +0000 |
commit | 3bdd75d01ef147e2a4f596bb53ab5f5957f734df (patch) | |
tree | 447b457b27859e7252a7795e06aa18bf180d5e58 /llvm/lib/Transforms | |
parent | 9e17df95d4003a2b54afc02de6eb1ee491a97ad6 (diff) | |
download | bcm5719-llvm-3bdd75d01ef147e2a4f596bb53ab5f5957f734df.tar.gz bcm5719-llvm-3bdd75d01ef147e2a4f596bb53ab5f5957f734df.zip |
InstCombine: Fold cos(-x) -> cos(x)
Also cos(fabs(x)) -> cos(x)
llvm-svn: 291022
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index f863d192fc2..b29ed3c8745 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -1637,6 +1637,20 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { break; } + case Intrinsic::cos: + case Intrinsic::amdgcn_cos: { + Value *SrcSrc; + Value *Src = II->getArgOperand(0); + if (match(Src, m_FNeg(m_Value(SrcSrc))) || + match(Src, m_Intrinsic<Intrinsic::fabs>(m_Value(SrcSrc)))) { + // cos(-x) -> cos(x) + // cos(fabs(x)) -> cos(x) + II->setArgOperand(0, SrcSrc); + return II; + } + + break; + } case Intrinsic::ppc_altivec_lvx: case Intrinsic::ppc_altivec_lvxl: // Turn PPC lvx -> load if the pointer is known aligned. |