https://github.com/adurang updated https://github.com/llvm/llvm-project/pull/226440
>From e1812a6047069eac1f476edf37aa1b2ca1ee352a Mon Sep 17 00:00:00 2001 From: "Duran, Alex" <[email protected]> Date: Mon, 7 Sep 2026 02:42:34 -0700 Subject: [PATCH] [offload][omp] Load plugins through liboffload --- offload/include/PluginManager.h | 3 +- offload/liboffload/src/OffloadImpl.cpp | 7 ++++ offload/libompaccsupport/PluginManager.cpp | 42 +++++++++++----------- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/offload/include/PluginManager.h b/offload/include/PluginManager.h index 6c6fdebe76dff..eea8b62a8c39d 100644 --- a/offload/include/PluginManager.h +++ b/offload/include/PluginManager.h @@ -13,6 +13,7 @@ #ifndef OMPTARGET_PLUGIN_MANAGER_H #define OMPTARGET_PLUGIN_MANAGER_H +#include "OffloadAPI.h" #include "PluginInterface.h" #include "DeviceImage.h" @@ -155,7 +156,7 @@ struct PluginManager { llvm::SmallVector<__tgt_bin_desc *> DelayedBinDesc; // List of all plugins, in use or not. - llvm::SmallVector<std::unique_ptr<GenericPluginTy>> Plugins; + llvm::SmallVector<GenericPluginTy *> Plugins; // Mapping of plugins to the OpenMP device identifier. llvm::DenseMap<std::pair<const GenericPluginTy *, int32_t>, int32_t> diff --git a/offload/liboffload/src/OffloadImpl.cpp b/offload/liboffload/src/OffloadImpl.cpp index 14bc83bb5e319..17ba5c0b4cef4 100644 --- a/offload/liboffload/src/OffloadImpl.cpp +++ b/offload/liboffload/src/OffloadImpl.cpp @@ -1501,5 +1501,12 @@ Error olQueryQueue_impl(ol_queue_handle_t Queue, bool *IsQueueWorkCompleted) { return Error::success(); } +namespace tmp { +// Temporary helpers to help transition of libomptarget to liboffload +GenericPluginTy *__ol_tgt_GetPluginFromPlatform(ol_platform_handle_t Platform) { + return Platform->Plugin.get(); +} +} // namespace tmp + } // namespace offload } // namespace llvm diff --git a/offload/libompaccsupport/PluginManager.cpp b/offload/libompaccsupport/PluginManager.cpp index 5f67a204f4203..d15009dc437ba 100644 --- a/offload/libompaccsupport/PluginManager.cpp +++ b/offload/libompaccsupport/PluginManager.cpp @@ -31,9 +31,9 @@ using namespace llvm::omp::target::debug; PluginManager *PM = nullptr; -// Every plugin exports this method to create an instance of the plugin type. -#define PLUGIN_TARGET(Name) extern "C" GenericPluginTy *createPlugin_##Name(); -#include "Shared/Targets.def" +namespace llvm::offload::tmp { +GenericPluginTy *__ol_tgt_GetPluginFromPlatform(ol_platform_handle_t Platform); +} // namespace llvm::offload::tmp void PluginManager::init() { TIMESCOPE(); @@ -43,14 +43,21 @@ void PluginManager::init() { } ODBG(ODT_Init) << "Loading RTLs"; - - // Attempt to create an instance of each supported plugin. -#define PLUGIN_TARGET(Name) \ - do { \ - Plugins.emplace_back( \ - std::unique_ptr<GenericPluginTy>(createPlugin_##Name())); \ - } while (false); -#include "Shared/Targets.def" + if (ol_result_t Res = olInit(nullptr)) + REPORT() << "Failed to initialize liboffload: " << Res->Details; + + if (ol_result_t Res = olIteratePlatforms( + [](ol_platform_handle_t Platform, void *Data) { + auto *PM = static_cast<PluginManager *>(Data); + auto *Plugin = + llvm::offload::tmp::__ol_tgt_GetPluginFromPlatform(Platform); + ODBG(ODT_Init) << "Adding plugin " << Plugin->getName() + << " from liboffload"; + PM->Plugins.push_back(Plugin); + return true; + }, + this)) + REPORT() << "Failed to iterate platforms: " << Res->Details; ODBG(ODT_Init) << "RTLs loaded!"; } @@ -65,16 +72,9 @@ void PluginManager::deinit() { performOmptCallback(device_finalize, Device.DeviceID); }); - for (auto &Plugin : Plugins) { - if (!Plugin->is_initialized()) - continue; - - if (auto Err = Plugin->deinit()) { - std::string InfoMsg = toString(std::move(Err)); - ODBG(ODT_Deinit) << "Failed to deinit plugin: " << InfoMsg; - } - Plugin.release(); - } + Plugins.clear(); + if (auto Err = olShutDown()) + REPORT() << "Failed to denitialize liboffload: " << Err->Details; ODBG(ODT_Deinit) << "RTLs unloaded!"; } _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
