From e95731cca7ecf5be22ea67a273cb19ba2c14d54c Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Tue, 21 Sep 2021 15:32:41 -0400 Subject: [PATCH] [OpenMP] Add thread ID function into new RTL The new device runtime library currently lacks the `kmpc_get_hardware_thread_id_in_block` function which is currently used when doing the SPMDzation optimization. This call would be introduced through the optimization and then cause a linking error because it was not present. This patch adds support for this runtime call. Reviewed By: tianshilei1992 Differential Revision: https://reviews.llvm.org/D110195 --- openmp/libomptarget/DeviceRTL/include/Interface.h | 3 +++ openmp/libomptarget/DeviceRTL/src/Mapping.cpp | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/openmp/libomptarget/DeviceRTL/include/Interface.h b/openmp/libomptarget/DeviceRTL/include/Interface.h index 1a8471a2352f..027d2c9e1364 100644 --- a/openmp/libomptarget/DeviceRTL/include/Interface.h +++ b/openmp/libomptarget/DeviceRTL/include/Interface.h @@ -198,6 +198,9 @@ void __kmpc_end_sharing_variables(); /// Called by the worker threads in the parallel region (function). void __kmpc_get_shared_variables(void ***GlobalArgs); +/// External interface to get the thread ID. +uint32_t __kmpc_get_hardware_thread_id_in_block(); + /// Kernel /// ///{ diff --git a/openmp/libomptarget/DeviceRTL/src/Mapping.cpp b/openmp/libomptarget/DeviceRTL/src/Mapping.cpp index 3bd055322cfb..ee2aeeea4700 100644 --- a/openmp/libomptarget/DeviceRTL/src/Mapping.cpp +++ b/openmp/libomptarget/DeviceRTL/src/Mapping.cpp @@ -226,4 +226,9 @@ bool mapping::isSPMDMode() { return IsSPMDMode; } bool mapping::isGenericMode() { return !isSPMDMode(); } ///} +extern "C" { +uint32_t __kmpc_get_hardware_thread_id_in_block() { + return mapping::getThreadIdInBlock(); +} +} #pragma omp end declare target