[llvm-branch-commits] [clang] [llvm] [Offload][Lang] Add blocking to LaunchKernel and Memcpy (PR #216430)

Kevin Sala Penades via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Aug 17 18:46:44 PDT 2026


================
@@ -51,12 +55,54 @@ static inline Error_t convertAndSetLastError(ol_result_t Result) {
 }
 
 /// Convert between the language-facing opaque stream and the internal stream.
-static inline Stream_t makeLanguageStream(llvm::offload::StreamTy *Stream) {
+static inline Stream_t makeLanguageStream(StreamTy *Stream) {
   return reinterpret_cast<Stream_t>(Stream);
 }
 
 static inline llvm::offload::StreamTy *getInternalStream(Stream_t Stream) {
-  return reinterpret_cast<llvm::offload::StreamTy *>(Stream);
+  return reinterpret_cast<StreamTy *>(Stream);
+}
+
+/// Wait for blocking streams before executing on the legacy default stream.
+static inline ol_result_t waitOnBlockingStreams(StreamTy *LegacyDefaultStream,
+                                                ol_device_handle_t Device) {
+  if (!LegacyDefaultStream ||
+      LegacyDefaultStream->Kind != llvm::offload::QueueKind::LegacyDefault)
+    return OL_SUCCESS;
+
+  llvm::SmallVector<ol_event_handle_t, 8> Events;
+  for (StreamTy *BlockingStream : RuntimeState::getBlockingStreams(Device)) {
+    ol_event_handle_t Event = nullptr;
+    ol_result_t Result =
+        olCreateEvent(BlockingStream->Queue, OL_EVENT_FLAGS_NONE, &Event);
+    if (Result != OL_SUCCESS)
+      return Result;
+    Events.push_back(Event);
+  }
+
+  if (Events.empty())
+    return OL_SUCCESS;
+  return olWaitEvents(LegacyDefaultStream->Queue, Events.data(), Events.size());
----------------
kevinsala wrote:

Are these events destroyed somewhere?

https://github.com/llvm/llvm-project/pull/216430


More information about the llvm-branch-commits mailing list