[ARM] Use generic bitreverse intrinsic, rather than ARM specific rbit.
The backend already supports lowering this intrinsic to a rbit instruction. llvm-svn: 291582
This commit is contained in:
parent
dc9834f912
commit
c22abb3820
|
@ -4318,9 +4318,9 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
|
|||
}
|
||||
|
||||
if (BuiltinID == ARM::BI__builtin_arm_rbit) {
|
||||
return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_rbit),
|
||||
EmitScalarExpr(E->getArg(0)),
|
||||
"rbit");
|
||||
llvm::Value *Arg = EmitScalarExpr(E->getArg(0));
|
||||
return Builder.CreateCall(
|
||||
CGM.getIntrinsic(Intrinsic::bitreverse, Arg->getType()), Arg, "rbit");
|
||||
}
|
||||
|
||||
if (BuiltinID == ARM::BI__clear_cache) {
|
||||
|
|
|
@ -244,22 +244,22 @@ int16_t test_revsh(int16_t t) {
|
|||
}
|
||||
|
||||
// ARM-LABEL: test_rbit
|
||||
// AArch32: call i32 @llvm.arm.rbit
|
||||
// AArch32: call i32 @llvm.bitreverse.i32
|
||||
// AArch64: call i32 @llvm.bitreverse.i32
|
||||
uint32_t test_rbit(uint32_t t) {
|
||||
return __rbit(t);
|
||||
}
|
||||
|
||||
// ARM-LABEL: test_rbitl
|
||||
// AArch32: call i32 @llvm.arm.rbit
|
||||
// AArch32: call i32 @llvm.bitreverse.i32
|
||||
// AArch64: call i64 @llvm.bitreverse.i64
|
||||
long test_rbitl(long t) {
|
||||
return __rbitl(t);
|
||||
}
|
||||
|
||||
// ARM-LABEL: test_rbitll
|
||||
// AArch32: call i32 @llvm.arm.rbit
|
||||
// AArch32: call i32 @llvm.arm.rbit
|
||||
// AArch32: call i32 @llvm.bitreverse.i32
|
||||
// AArch32: call i32 @llvm.bitreverse.i32
|
||||
// AArch64: call i64 @llvm.bitreverse.i64
|
||||
uint64_t test_rbitll(uint64_t t) {
|
||||
return __rbitll(t);
|
||||
|
|
|
@ -68,7 +68,7 @@ void test_barrier() {
|
|||
__builtin_arm_isb(3); //CHECK: call {{.*}} @llvm.arm.isb(i32 3)
|
||||
}
|
||||
|
||||
// CHECK: call {{.*}} @llvm.arm.rbit(i32 %a)
|
||||
// CHECK: call {{.*}} @llvm.bitreverse.i32(i32 %a)
|
||||
|
||||
unsigned rbit(unsigned a) {
|
||||
return __builtin_arm_rbit(a);
|
||||
|
|
Loading…
Reference in New Issue