[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