[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
This commit is contained in:
Joseph Huber 2021-07-20 16:07:52 -04:00 committed by Huber, Joseph
parent 7d57639264
commit 1684012a47
3 changed files with 11 additions and 1 deletions

View 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_warp_active_thread_mask, false, LanemaskTy,)
__OMP_RTL(__kmpc_syncwarp, false, Void, LanemaskTy) __OMP_RTL(__kmpc_syncwarp, false, Void, LanemaskTy)
__OMP_RTL(__kmpc_is_generic_main_thread_id, false, Int8, Int32)
__OMP_RTL(__last, false, Void, ) __OMP_RTL(__last, false, Void, )
#undef __OMP_RTL #undef __OMP_RTL

View File

@ -162,7 +162,11 @@ EXTERN int8_t __kmpc_is_spmd_exec_mode() {
} }
EXTERN int8_t __kmpc_is_generic_main_thread(kmp_int32 Tid) { 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); EXTERN bool __kmpc_kernel_parallel(void**WorkFn);

View File

@ -453,6 +453,10 @@ EXTERN int8_t __kmpc_is_spmd_exec_mode();
/// thread in generic mode outside of a parallel region. /// thread in generic mode outside of a parallel region.
EXTERN int8_t __kmpc_is_generic_main_thread(kmp_int32 Tid); 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, EXTERN void __kmpc_get_team_static_memory(int16_t isSPMDExecutionMode,
const void *buf, size_t size, const void *buf, size_t size,
int16_t is_shared, const void **res); int16_t is_shared, const void **res);