From f0ba69fc16fc32cfca7212265d969d9c274e53b6 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Tue, 28 Jul 2015 13:10:10 +0000 Subject: [PATCH] [AArch64] Implement __builtin_thread_pointer This path add the aarch64 __builtin_thread_pointer support. It will be lowered to llvm.aarch64.thread.pointer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243413 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/BuiltinsAArch64.def | 1 + lib/CodeGen/CGBuiltin.cpp | 5 +++++ test/CodeGen/builtins-arm64.c | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/include/clang/Basic/BuiltinsAArch64.def b/include/clang/Basic/BuiltinsAArch64.def index 1db4c14710..b4404434e7 100644 --- a/include/clang/Basic/BuiltinsAArch64.def +++ b/include/clang/Basic/BuiltinsAArch64.def @@ -60,5 +60,6 @@ BUILTIN(__builtin_arm_rsrp, "v*cC*", "nc") BUILTIN(__builtin_arm_wsr, "vcC*Ui", "nc") BUILTIN(__builtin_arm_wsr64, "vcC*LUi", "nc") BUILTIN(__builtin_arm_wsrp, "vcC*vC*", "nc") +BUILTIN(__builtin_thread_pointer, "v*", "nc") #undef BUILTIN diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 9b8694f9c5..a54b10f943 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -4342,6 +4342,11 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID, return Builder.CreateCall(F); } + if (BuiltinID == AArch64::BI__builtin_thread_pointer) { + Function *F = CGM.getIntrinsic(Intrinsic::aarch64_thread_pointer); + return Builder.CreateCall(F); + } + // CRC32 Intrinsic::ID CRCIntrinsicID = Intrinsic::not_intrinsic; switch (BuiltinID) { diff --git a/test/CodeGen/builtins-arm64.c b/test/CodeGen/builtins-arm64.c index f2c1c54545..16e22d771f 100644 --- a/test/CodeGen/builtins-arm64.c +++ b/test/CodeGen/builtins-arm64.c @@ -5,6 +5,11 @@ void f0(void *a, void *b) { // CHECK: call {{.*}} @__clear_cache } +void *tp (void) { + return __builtin_thread_pointer (); +// CHECK: call {{.*}} @llvm.aarch64.thread.pointer() +} + // CHECK: call {{.*}} @llvm.aarch64.rbit.i32(i32 %a) unsigned rbit(unsigned a) { return __builtin_arm_rbit(a); -- 2.40.0