[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