//===----------- rtl.cpp - Target independent OpenMP target RTL -----------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Initialization and tear down of the offload runtime. // //===----------------------------------------------------------------------===// #include "OpenMP/OMPT/Callback.h" #include "PluginManager.h" #include "Shared/Debug.h" #include "Shared/Profile.h" #ifdef OMPT_SUPPORT extern void llvm::omp::target::ompt::connectLibrary(); #endif static std::mutex PluginMtx; static uint32_t RefCount = 0; void initRuntime() { std::scoped_lock Lock(PluginMtx); Profiler::get(); TIMESCOPE(); if (PM == nullptr) PM = new PluginManager(); RefCount++; if (RefCount == 1) { DP("Init offload library!\n"); #ifdef OMPT_SUPPORT // Initialize OMPT first llvm::omp::target::ompt::connectLibrary(); #endif PM->init(); PM->registerDelayedLibraries(); } } void deinitRuntime() { std::scoped_lock Lock(PluginMtx); assert(PM && "Runtime not initialized"); if (RefCount == 1) { DP("Deinit offload library!\n"); PM->deinit(); delete PM; PM = nullptr; } RefCount--; }