[Libomptarget] Introduce new main thread ID runtime function
authorJoseph Huber <jhuber6@vols.utk.edu>
Tue, 20 Jul 2021 20:07:52 +0000 (16:07 -0400)
committerHuber, Joseph <huberjn@ornl.gov>
Thu, 22 Jul 2021 01:18:14 +0000 (21:18 -0400)
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

llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
openmp/libomptarget/deviceRTLs/common/src/omptarget.cu
openmp/libomptarget/deviceRTLs/interface.h

index 0ef2a5e..37da438 100644 (file)
@@ -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
index 3b620de..ce016ce 100644 (file)
@@ -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);
index e09e629..ade1bfe 100644 (file)
@@ -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);