diff options
author | James Molloy <james.molloy@arm.com> | 2015-11-12 12:39:41 +0000 |
---|---|---|
committer | James Molloy <james.molloy@arm.com> | 2015-11-12 12:39:41 +0000 |
commit | 2d09c00b918c29cf3e581459eed1946987357722 (patch) | |
tree | 3b2758d2a2bd71eaef0311088e07f3ae282c2967 /llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | |
parent | 90111f79f9f34e0ba488c1453e2e3b57db2553e7 (diff) | |
download | bcm5719-llvm-2d09c00b918c29cf3e581459eed1946987357722.tar.gz bcm5719-llvm-2d09c00b918c29cf3e581459eed1946987357722.zip |
[InstCombine] Add trivial folding (bitreverse (bitreverse x)) -> x
There are plenty more instcombines we could probably do with bitreverse, but this seems like a very obvious and trivial starting point and was brought up by Hal in his review.
llvm-svn: 252879
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index c3fa7be3272..cde26cc24c2 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -788,6 +788,16 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { break; } + case Intrinsic::bitreverse: { + Value *IIOperand = II->getArgOperand(0); + Value *X = nullptr; + + // bitreverse(bitreverse(x)) -> x + if (match(IIOperand, m_Intrinsic<Intrinsic::bitreverse>(m_Value(X)))) + return ReplaceInstUsesWith(CI, X); + break; + } + case Intrinsic::powi: if (ConstantInt *Power = dyn_cast<ConstantInt>(II->getArgOperand(1))) { // powi(x, 0) -> 1.0 |