[llvm-branch-commits] [llvm] [libsycl] Add liboffload kernel creation (PR #188794)
Yury Plyakhin via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Mar 27 15:00:24 PDT 2026
================
@@ -140,6 +161,81 @@ DeviceImageWrapper *ProgramManager::getDeviceImage(std::string_view KernelName,
"No kernel named " + std::string(KernelName) + " was found");
}
+ol_symbol_handle_t ProgramManager::getOrCreateKernel(const char *KernelName,
+ DeviceImpl &Device) {
+ std::lock_guard<std::mutex> ImageGuard(MImageCollectionMutex);
+
+ auto KernelIDIt = MKernelNameToID.find(KernelName);
+ if (KernelIDIt == MKernelNameToID.end())
+ throw exception(make_error_code(errc::runtime),
+ "No kernel named " + std::string(KernelName) +
+ " was found");
+
+ std::lock_guard<std::mutex> KernelGuard(MKernelCollectionsMutex);
+
+ auto Kernel = getKernel(KernelIDIt->second, Device);
+ if (Kernel)
+ return Kernel;
+
+ DeviceImageWrapper *DevImage =
+ getDeviceImage(KernelName, KernelIDIt->second, Device);
+ if (!DevImage)
+ throw;
+
+ ol_program_handle_t Program = getOrCreateProgram(Device, DevImage);
+ assert(Program);
+ Kernel = createKernel(Program, KernelIDIt->second, KernelName, Device);
+ assert(Kernel);
+ return Kernel;
+}
+
+ol_program_handle_t
+ProgramManager::getOrCreateProgram(DeviceImpl &Device,
+ DeviceImageWrapper *DevImage) {
+ if (auto DevToProgramIt = MPrograms.find(DevImage);
+ DevToProgramIt != MPrograms.end()) {
+ auto ProgramIt = DevToProgramIt->second.find(Device.getHandle());
+ if (ProgramIt != DevToProgramIt->second.end())
+ return ProgramIt->second;
+ }
+
+ std::unique_ptr<ProgramWrapper> NewProgramWrapper(
+ new ProgramWrapper(Device.getHandle(), *DevImage));
+ auto Program = NewProgramWrapper->getHandle();
+ {
----------------
YuriPlyakhin wrote:
why this scope block is needed?
https://github.com/llvm/llvm-project/pull/188794
More information about the llvm-branch-commits
mailing list