From: Joseph Huber Date: Tue, 20 Jul 2021 20:07:52 +0000 (-0400) Subject: [Libomptarget] Introduce new main thread ID runtime function X-Git-Tag: llvmorg-14-init~678 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1684012a47f76e210612bdd44a9d57147a90c4a6;p=platform%2Fupstream%2Fllvm.git [Libomptarget] Introduce new main thread ID runtime function This patch introduces `__kmpc_is_generic_main_thread_id` which splits the old comparison into its own runtime function. The purpose of this is so we can fold this part independently, so when both this and `is_spmd_mode` are folded the final function will be folded as well. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D106437 --- diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def index 0ef2a5e..37da438 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def +++ b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def @@ -441,6 +441,8 @@ __OMP_RTL(__kmpc_barrier_simple_spmd, false, Void, IdentPtr, Int32) __OMP_RTL(__kmpc_warp_active_thread_mask, false, LanemaskTy,) __OMP_RTL(__kmpc_syncwarp, false, Void, LanemaskTy) +__OMP_RTL(__kmpc_is_generic_main_thread_id, false, Int8, Int32) + __OMP_RTL(__last, false, Void, ) #undef __OMP_RTL diff --git a/openmp/libomptarget/deviceRTLs/common/src/omptarget.cu b/openmp/libomptarget/deviceRTLs/common/src/omptarget.cu index 3b620de..ce016ce 100644 --- a/openmp/libomptarget/deviceRTLs/common/src/omptarget.cu +++ b/openmp/libomptarget/deviceRTLs/common/src/omptarget.cu @@ -162,7 +162,11 @@ EXTERN int8_t __kmpc_is_spmd_exec_mode() { } EXTERN int8_t __kmpc_is_generic_main_thread(kmp_int32 Tid) { - return !__kmpc_is_spmd_exec_mode() && GetMasterThreadID() == Tid; + return !__kmpc_is_spmd_exec_mode() && __kmpc_is_generic_main_thread_id(Tid); +} + +NOINLINE EXTERN int8_t __kmpc_is_generic_main_thread_id(kmp_int32 Tid) { + return GetMasterThreadID() == Tid; } EXTERN bool __kmpc_kernel_parallel(void**WorkFn); diff --git a/openmp/libomptarget/deviceRTLs/interface.h b/openmp/libomptarget/deviceRTLs/interface.h index e09e629..ade1bfe 100644 --- a/openmp/libomptarget/deviceRTLs/interface.h +++ b/openmp/libomptarget/deviceRTLs/interface.h @@ -453,6 +453,10 @@ EXTERN int8_t __kmpc_is_spmd_exec_mode(); /// thread in generic mode outside of a parallel region. EXTERN int8_t __kmpc_is_generic_main_thread(kmp_int32 Tid); +/// Return true if the hardware thread id \p Tid represents the OpenMP main +/// thread in generic mode. +EXTERN int8_t __kmpc_is_generic_main_thread_id(kmp_int32 Tid); + EXTERN void __kmpc_get_team_static_memory(int16_t isSPMDExecutionMode, const void *buf, size_t size, int16_t is_shared, const void **res);