aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Niu <jeff@modular.com>2024-04-01 13:59:53 -0700
committerGitHub <noreply@github.com>2024-04-01 22:59:53 +0200
commitf2f01f6b03aa81d5bdbf841a88f8853620c6902b (patch)
tree8befa9d02e2b4ed89396f2ee53d6a19b903c8422
parentb8cc3ba409dc850776f37e27613bf74f5a80d66a (diff)
downloadllvm-f2f01f6b03aa81d5bdbf841a88f8853620c6902b.zip
llvm-f2f01f6b03aa81d5bdbf841a88f8853620c6902b.tar.gz
llvm-f2f01f6b03aa81d5bdbf841a88f8853620c6902b.tar.bz2
[llvm][Support] Use `thread_local` caching for llvm::get_threadid() query on Apple systems (#87219)
I was profiling our compiler and noticed that `llvm::get_threadid` was at the top of the hotlist, taking up a surprising 5% (7 seconds) in the profile trace. It seems that computing this on MacOS systems is non-trivial, so cache the result in a thread_local. Co-authored-by: Mehdi Amini <joker.eph@gmail.com>
-rw-r--r--llvm/lib/Support/Unix/Threading.inc7
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Support/Unix/Threading.inc b/llvm/lib/Support/Unix/Threading.inc
index 55e7dcf..839c00c 100644
--- a/llvm/lib/Support/Unix/Threading.inc
+++ b/llvm/lib/Support/Unix/Threading.inc
@@ -115,8 +115,11 @@ uint64_t llvm::get_threadid() {
// Calling "mach_thread_self()" bumps the reference count on the thread
// port, so we need to deallocate it. mach_task_self() doesn't bump the ref
// count.
- thread_port_t Self = mach_thread_self();
- mach_port_deallocate(mach_task_self(), Self);
+ static thread_local thread_port_t Self = [] {
+ thread_port_t InitSelf = mach_thread_self();
+ mach_port_deallocate(mach_task_self(), Self);
+ return InitSelf;
+ }();
return Self;
#elif defined(__FreeBSD__)
return uint64_t(pthread_getthreadid_np());