diff options
author | Chad Rosier <mcrosier@codeaurora.org> | 2017-01-10 17:20:33 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@codeaurora.org> | 2017-01-10 17:20:33 +0000 |
commit | 3daffbf6a86430277f85c05abb93c1bd3316b8db (patch) | |
tree | 5850d60f28daa5de5828b8d5bd689e36e0108563 /llvm/lib/IR/AutoUpgrade.cpp | |
parent | 5a4a1be690272a7d388e2fde1abf9d2f4e45aa18 (diff) | |
download | llvm-3daffbf6a86430277f85c05abb93c1bd3316b8db.zip llvm-3daffbf6a86430277f85c05abb93c1bd3316b8db.tar.gz llvm-3daffbf6a86430277f85c05abb93c1bd3316b8db.tar.bz2 |
[AArch64] Add support for lowering bitreverse to the rbit instruction.
Differential Revision: https://reviews.llvm.org/D28379
llvm-svn: 291575
Diffstat (limited to 'llvm/lib/IR/AutoUpgrade.cpp')
-rw-r--r-- | llvm/lib/IR/AutoUpgrade.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp index a87b9be..6a66d13 100644 --- a/llvm/lib/IR/AutoUpgrade.cpp +++ b/llvm/lib/IR/AutoUpgrade.cpp @@ -77,6 +77,11 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) { switch (Name[0]) { default: break; case 'a': { + if (Name.startswith("aarch64.rbit")) { + NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::bitreverse, + F->arg_begin()->getType()); + return true; + } if (Name.startswith("arm.neon.vclz")) { Type* args[2] = { F->arg_begin()->getType(), @@ -1761,6 +1766,11 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { return; } + case Intrinsic::bitreverse: + CI->replaceAllUsesWith(Builder.CreateCall(NewFn, {CI->getArgOperand(0)})); + CI->eraseFromParent(); + return; + case Intrinsic::ctlz: case Intrinsic::cttz: assert(CI->getNumArgOperands() == 1 && |