forked from OSchip/llvm-project
AArch64: Support for __builtin_arm_rbit() and __builtin_arm_rbit64().
__builtin_arm_rbit() and __builtin_arm_rbit64(). rdar://9283021 llvm-svn: 211060
This commit is contained in:
parent
171ec34544
commit
79140826bc
|
@ -21,6 +21,10 @@ BUILTIN(__builtin_arm_ldrex, "v.", "t")
|
|||
BUILTIN(__builtin_arm_strex, "i.", "t")
|
||||
BUILTIN(__builtin_arm_clrex, "v", "")
|
||||
|
||||
// Bit manipulation
|
||||
BUILTIN(__builtin_arm_rbit, "UiUi", "nc")
|
||||
BUILTIN(__builtin_arm_rbit64, "LUiLUi", "nc")
|
||||
|
||||
// CRC32
|
||||
BUILTIN(__builtin_arm_crc32b, "UiUiUc", "nc")
|
||||
BUILTIN(__builtin_arm_crc32cb, "UiUiUc", "nc")
|
||||
|
|
|
@ -3763,6 +3763,21 @@ emitVectorWrappedScalar16Intrinsic(unsigned Int, SmallVectorImpl<Value*> &Ops,
|
|||
|
||||
Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
|
||||
const CallExpr *E) {
|
||||
if (BuiltinID == AArch64::BI__builtin_arm_rbit) {
|
||||
assert((getContext().getTypeSize(E->getType()) == 32) &&
|
||||
"rbit of unusual size!");
|
||||
llvm::Value *Arg = EmitScalarExpr(E->getArg(0));
|
||||
return Builder.CreateCall(
|
||||
CGM.getIntrinsic(Intrinsic::aarch64_rbit, Arg->getType()), Arg, "rbit");
|
||||
}
|
||||
if (BuiltinID == AArch64::BI__builtin_arm_rbit64) {
|
||||
assert((getContext().getTypeSize(E->getType()) == 64) &&
|
||||
"rbit of unusual size!");
|
||||
llvm::Value *Arg = EmitScalarExpr(E->getArg(0));
|
||||
return Builder.CreateCall(
|
||||
CGM.getIntrinsic(Intrinsic::aarch64_rbit, Arg->getType()), Arg, "rbit");
|
||||
}
|
||||
|
||||
if (BuiltinID == AArch64::BI__clear_cache) {
|
||||
assert(E->getNumArgs() == 2 && "__clear_cache takes 2 arguments");
|
||||
const FunctionDecl *FD = E->getDirectCallee();
|
||||
|
|
|
@ -4,3 +4,13 @@ void f0(void *a, void *b) {
|
|||
__clear_cache(a,b);
|
||||
// CHECK: call {{.*}} @__clear_cache
|
||||
}
|
||||
|
||||
// CHECK: call {{.*}} @llvm.aarch64.rbit.i32(i32 %a)
|
||||
void rbit(unsigned a) {
|
||||
__builtin_arm_rbit(a);
|
||||
}
|
||||
|
||||
// CHECK: call {{.*}} @llvm.aarch64.rbit.i64(i64 %a)
|
||||
void rbit64(unsigned long long a) {
|
||||
__builtin_arm_rbit64(a);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue