]> granicus.if.org Git - clang/commitdiff
[AArch64] Implement __builtin_thread_pointer
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 28 Jul 2015 13:10:10 +0000 (13:10 +0000)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 28 Jul 2015 13:10:10 +0000 (13:10 +0000)
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
lib/CodeGen/CGBuiltin.cpp
test/CodeGen/builtins-arm64.c

index 1db4c1471029bc99e425b00e907f1b561686fc93..b4404434e7a82dc4cb56744eecf4348986826983 100644 (file)
@@ -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
index 9b8694f9c5f213849f7c89a178a8f3572a39f24b..a54b10f943b273be0b7d7537440092588f2f945b 100644 (file)
@@ -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) {
index f2c1c5454548da2185471f8c3f82f8641760892f..16e22d771fcac94aaa45b0b37ac6d042bca2899c 100644 (file)
@@ -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);