diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-03 22:40:34 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-01-03 22:40:34 +0000 |
commit | 56ff4839aee715740271497b2a40c214f0aaedb3 (patch) | |
tree | ec153967483006cadbfafe657b2feb5f954a30b3 /llvm/lib/Transforms | |
parent | f0d1e773733d43530a47a437579ce329397a0e39 (diff) | |
download | bcm5719-llvm-56ff4839aee715740271497b2a40c214f0aaedb3.tar.gz bcm5719-llvm-56ff4839aee715740271497b2a40c214f0aaedb3.zip |
InstCombine: Fold fabs on select of constants
llvm-svn: 290913
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index b39649c6dea..f863d192fc2 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -1625,6 +1625,18 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { break; } + case Intrinsic::fabs: { + Value *Cond; + Constant *LHS, *RHS; + if (match(II->getArgOperand(0), + m_Select(m_Value(Cond), m_Constant(LHS), m_Constant(RHS)))) { + CallInst *Call0 = Builder->CreateCall(II->getCalledFunction(), {LHS}); + CallInst *Call1 = Builder->CreateCall(II->getCalledFunction(), {RHS}); + return SelectInst::Create(Cond, Call0, Call1); + } + + break; + } case Intrinsic::ppc_altivec_lvx: case Intrinsic::ppc_altivec_lvxl: // Turn PPC lvx -> load if the pointer is known aligned. |