From 26feef084616a18e9b61acb9c78dfca40f4c6f97 Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Thu, 20 Jan 2022 13:06:22 -0500 Subject: [PATCH] [Libomptarget] Change visibility to hidden for device RTL This patch changes the visibility for all construct in the new device RTL to be hidden by default. This is done after the changes introduced in D117806 changed the visibility from being hidden by default for all device compilations. This asserts that the visibility for the device runtime library will be hidden except for the internal environment variable. This is done to aid optimization and linking of the device library. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D117807 --- openmp/libomptarget/DeviceRTL/CMakeLists.txt | 4 ++-- openmp/libomptarget/DeviceRTL/include/Types.h | 3 +-- openmp/libomptarget/DeviceRTL/src/Configuration.cpp | 4 +++- openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt | 2 +- openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h | 4 ++-- openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt | 1 + 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/openmp/libomptarget/DeviceRTL/CMakeLists.txt b/openmp/libomptarget/DeviceRTL/CMakeLists.txt index 8185727..2e52bdf 100644 --- a/openmp/libomptarget/DeviceRTL/CMakeLists.txt +++ b/openmp/libomptarget/DeviceRTL/CMakeLists.txt @@ -130,7 +130,7 @@ set (LIBOMPTARGET_LLVM_INCLUDE_DIRS_DEVICERTL "${LIBOMPTARGET_LLVM_INCLUDE_DIRS} list(TRANSFORM LIBOMPTARGET_LLVM_INCLUDE_DIRS_DEVICERTL PREPEND "-I") # Set flags for LLVM Bitcode compilation. -set(bc_flags -S -x c++ -std=c++17 +set(bc_flags -S -x c++ -std=c++17 -fvisibility=hidden ${clang_opt_flags} -Xclang -emit-llvm-bc -Xclang -aux-triple -Xclang ${aux_triple} @@ -231,5 +231,5 @@ foreach(sm ${nvptx_sm_list}) endforeach() foreach(mcpu ${amdgpu_mcpus}) - compileDeviceRTLLibrary(${mcpu} amdgpu -target amdgcn-amd-amdhsa -D__AMDGCN__ -fvisibility=default -nogpulib) + compileDeviceRTLLibrary(${mcpu} amdgpu -target amdgcn-amd-amdhsa -D__AMDGCN__ -nogpulib) endforeach() diff --git a/openmp/libomptarget/DeviceRTL/include/Types.h b/openmp/libomptarget/DeviceRTL/include/Types.h index 8d9b48a0..0ff0cee 100644 --- a/openmp/libomptarget/DeviceRTL/include/Types.h +++ b/openmp/libomptarget/DeviceRTL/include/Types.h @@ -193,8 +193,7 @@ enum OMPTgtExecModeFlags : int8_t { // TODO: clang should use address space 5 for omp_thread_mem_alloc, but right // now that's not the case. #define THREAD_LOCAL(NAME) \ - NAME [[clang::loader_uninitialized, clang::address_space(5), \ - gnu::visibility("hidden")]] + NAME [[clang::loader_uninitialized, clang::address_space(5)]] // TODO: clang should use address space 4 for omp_const_mem_alloc, maybe it // does? diff --git a/openmp/libomptarget/DeviceRTL/src/Configuration.cpp b/openmp/libomptarget/DeviceRTL/src/Configuration.cpp index ee8a98d..349f93a 100644 --- a/openmp/libomptarget/DeviceRTL/src/Configuration.cpp +++ b/openmp/libomptarget/DeviceRTL/src/Configuration.cpp @@ -23,8 +23,10 @@ using namespace _OMP; extern uint32_t __omp_rtl_debug_kind; // defined by CGOpenMPRuntimeGPU // TODO: We want to change the name as soon as the old runtime is gone. +// This variable should be visibile to the plugin so we override the default +// hidden visibility. DeviceEnvironmentTy CONSTANT(omptarget_device_environment) - __attribute__((used, retain, weak)); + __attribute__((used, retain, weak, visibility("protected"))); uint32_t config::getDebugKind() { return __omp_rtl_debug_kind & omptarget_device_environment.DebugKind; diff --git a/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt b/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt index 0207da1..5ff5dde 100644 --- a/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt +++ b/openmp/libomptarget/deviceRTLs/amdgcn/CMakeLists.txt @@ -132,7 +132,7 @@ macro(add_cuda_bc_library) -fopenmp -fopenmp-cuda-mode -Xclang -fopenmp-is-device -D__AMDGCN__ -Xclang -target-cpu -Xclang ${mcpu} - -fvisibility=default + -fvisibility=hidden -Wno-unused-value -nogpulib -O${optimization_level} diff --git a/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h b/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h index 1303258..3ea7cde 100644 --- a/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h +++ b/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h @@ -34,8 +34,8 @@ typedef uint64_t __kmpc_impl_lanemask_t; __attribute__((used)) /* Don't discard values the plugin reads */ \ __attribute__((weak)) /* We may have multiple definitions */ \ __attribute__((retain)) /* Also needed to keep values alive */ \ - __attribute__((visibility("default"))) /* Access via SHT_HASH */ \ - __attribute__((section(".data"))) /* Not .bss, can write before load */ + __attribute__((visibility("protected"))) /* Access via SHT_HASH */ \ + __attribute__((section(".data"))) /* Not .bss, can write before load */ #include "llvm/Frontend/OpenMP/OMPGridValues.h" diff --git a/openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt b/openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt index 3f1c4e7..1612689 100644 --- a/openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt +++ b/openmp/libomptarget/deviceRTLs/nvptx/CMakeLists.txt @@ -165,6 +165,7 @@ set(bc_flags -S -x c++ -O1 -std=c++14 -mllvm -openmp-opt-disable -ffreestanding -target nvptx64 + -fvisibility=hidden -Xclang -emit-llvm-bc -Xclang -aux-triple -Xclang ${aux_triple} -fopenmp -fopenmp-cuda-mode -Xclang -fopenmp-is-device -- 2.7.4