diff options
Diffstat (limited to 'libc')
-rw-r--r-- | libc/src/__support/RPC/rpc_util.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/libc/src/__support/RPC/rpc_util.h b/libc/src/__support/RPC/rpc_util.h index 53a993292fb3..22c5c1d216c8 100644 --- a/libc/src/__support/RPC/rpc_util.h +++ b/libc/src/__support/RPC/rpc_util.h @@ -26,6 +26,16 @@ LIBC_INLINE void sleep_briefly() { #endif } +/// Get the first active thread inside the lane. +LIBC_INLINE uint64_t get_first_lane_id(uint64_t lane_mask) { + return __builtin_ffsl(lane_mask) - 1; +} + +/// Conditional that is only true for a single thread in a lane. +LIBC_INLINE bool is_first_lane(uint64_t lane_mask) { + return gpu::get_lane_id() == get_first_lane_id(lane_mask); +} + } // namespace rpc } // namespace __llvm_libc |