[Openmp-commits] [openmp] [OpenMP][NFC] Remove `DelayedBinDesc` (PR #74360)

Johannes Doerfert via Openmp-commits openmp-commits at lists.llvm.org
Wed Dec 6 11:49:27 PST 2023


https://github.com/jdoerfert updated https://github.com/llvm/llvm-project/pull/74360

>From b9f9e0f53f685b0cc81614745535a386932492a6 Mon Sep 17 00:00:00 2001
From: Johannes Doerfert <johannes at jdoerfert.de>
Date: Mon, 4 Dec 2023 11:16:25 -0800
Subject: [PATCH]  [OpenMP][NFC] Remove `DelayedBinDesc`

  The `DelayedBinDesc` was removed as it is not necessary. It was either
  never used or racy. The only time we could have called it was after we
  created `PM` in the `init()` constructor. However, we immediately went
  ahead and called `registerDelayedLibraries` which disabled
  `DelayedBinDesc` for the future. This was like that since
  https://reviews.llvm.org/D142249 landed.

  Also include the reproducer of
  https://github.com/llvm/llvm-project/issues/60119
  which was missing in D142249.
---
 openmp/libomptarget/include/PluginManager.h   | 20 -------------------
 openmp/libomptarget/src/interface.cpp         |  3 ---
 openmp/libomptarget/src/rtl.cpp               |  1 -
 openmp/libomptarget/test/Inputs/empty.c       |  1 +
 .../libomptarget/test/offloading/bug60119.c   |  6 ++++++
 5 files changed, 7 insertions(+), 24 deletions(-)
 create mode 100644 openmp/libomptarget/test/Inputs/empty.c
 create mode 100644 openmp/libomptarget/test/offloading/bug60119.c

diff --git a/openmp/libomptarget/include/PluginManager.h b/openmp/libomptarget/include/PluginManager.h
index 94ecce01ca74c..889bcec4655ca 100644
--- a/openmp/libomptarget/include/PluginManager.h
+++ b/openmp/libomptarget/include/PluginManager.h
@@ -106,23 +106,6 @@ struct PluginManager {
   HostPtrToTableMapTy HostPtrToTableMap;
   std::mutex TblMapMtx; ///< For HostPtrToTableMap
 
-  // Work around for plugins that call dlopen on shared libraries that call
-  // tgt_register_lib during their initialisation. Stash the pointers in a
-  // vector until the plugins are all initialised and then register them.
-  bool delayRegisterLib(__tgt_bin_desc *Desc) {
-    if (RTLsLoaded)
-      return false;
-    DelayedBinDesc.push_back(Desc);
-    return true;
-  }
-
-  void registerDelayedLibraries() {
-    // Only called by libomptarget constructor
-    RTLsLoaded = true;
-    for (auto *Desc : DelayedBinDesc)
-      __tgt_register_lib(Desc);
-    DelayedBinDesc.clear();
-  }
 
   int getNumDevices() {
     std::lock_guard<decltype(RTLsMtx)> Lock(RTLsMtx);
@@ -154,9 +137,6 @@ struct PluginManager {
   void addRequirements(int64_t Flags) { Requirements.addRequirements(Flags); }
 
 private:
-  bool RTLsLoaded = false;
-  llvm::SmallVector<__tgt_bin_desc *> DelayedBinDesc;
-
   // List of all plugin adaptors, in use or not.
   std::list<PluginAdaptorTy> PluginAdaptors;
 
diff --git a/openmp/libomptarget/src/interface.cpp b/openmp/libomptarget/src/interface.cpp
index 62cf2262deb62..b27410ed12eaf 100644
--- a/openmp/libomptarget/src/interface.cpp
+++ b/openmp/libomptarget/src/interface.cpp
@@ -46,9 +46,6 @@ EXTERN void __tgt_register_requires(int64_t Flags) {
 /// adds a target shared library to the target execution image
 EXTERN void __tgt_register_lib(__tgt_bin_desc *Desc) {
   TIMESCOPE();
-  if (PM->delayRegisterLib(Desc))
-    return;
-
   PM->registerLib(Desc);
 }
 
diff --git a/openmp/libomptarget/src/rtl.cpp b/openmp/libomptarget/src/rtl.cpp
index 5eb1c553df491..27db7034d8956 100644
--- a/openmp/libomptarget/src/rtl.cpp
+++ b/openmp/libomptarget/src/rtl.cpp
@@ -51,7 +51,6 @@ __attribute__((constructor(101))) void init() {
   PM->init();
 
   Profiler::get();
-  PM->registerDelayedLibraries();
 }
 
 __attribute__((destructor(101))) void deinit() {
diff --git a/openmp/libomptarget/test/Inputs/empty.c b/openmp/libomptarget/test/Inputs/empty.c
new file mode 100644
index 0000000000000..8b137891791fe
--- /dev/null
+++ b/openmp/libomptarget/test/Inputs/empty.c
@@ -0,0 +1 @@
+
diff --git a/openmp/libomptarget/test/offloading/bug60119.c b/openmp/libomptarget/test/offloading/bug60119.c
new file mode 100644
index 0000000000000..e32f1ccd59881
--- /dev/null
+++ b/openmp/libomptarget/test/offloading/bug60119.c
@@ -0,0 +1,6 @@
+// RUN: %clang-generic -fPIC -shared %S/../Inputs/empty.c -o %T/liba.so
+// RUN: %clang-generic -fPIC -shared %S/../Inputs/empty.c -o %T/libb.so
+// RUN: %clang-generic -rpath %T -L %T -l a -l b %s -o %t
+// RUN: %t
+
+int main() {}



More information about the Openmp-commits mailing list