summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-01-04 22:49:03 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-01-04 22:49:03 +0000
commit3bdd75d01ef147e2a4f596bb53ab5f5957f734df (patch)
tree447b457b27859e7252a7795e06aa18bf180d5e58 /llvm/lib/Transforms
parent9e17df95d4003a2b54afc02de6eb1ee491a97ad6 (diff)
downloadbcm5719-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.cpp14
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.
OpenPOWER on IntegriCloud