[llvm] f2f01f6 - [llvm][Support] Use `thread_local` caching for llvm::get_threadid() query on Apple systems (#87219)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 1 13:59:56 PDT 2024
Author: Jeff Niu
Date: 2024-04-01T22:59:53+02:00
New Revision: f2f01f6b03aa81d5bdbf841a88f8853620c6902b
URL: https://github.com/llvm/llvm-project/commit/f2f01f6b03aa81d5bdbf841a88f8853620c6902b
DIFF: https://github.com/llvm/llvm-project/commit/f2f01f6b03aa81d5bdbf841a88f8853620c6902b.diff
LOG: [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 at gmail.com>
Added:
Modified:
llvm/lib/Support/Unix/Threading.inc
Removed:
################################################################################
diff --git a/llvm/lib/Support/Unix/Threading.inc b/llvm/lib/Support/Unix/Threading.inc
index 55e7dcfa4678cf..839c00c5ebbf96 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());
More information about the llvm-commits
mailing list