[llvm] [Offload] OL_QUEUE_INFO_EMPTY (PR #152473)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 7 03:02:14 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-offload
Author: Ross Brunton (RossBrunton)
<details>
<summary>Changes</summary>
Add a queue query that (if possible) reports whether the queue is empty
---
Full diff: https://github.com/llvm/llvm-project/pull/152473.diff
4 Files Affected:
- (modified) offload/liboffload/API/Queue.td (+2-1)
- (modified) offload/liboffload/src/OffloadImpl.cpp (+6)
- (modified) offload/unittests/OffloadAPI/queue/olGetQueueInfo.cpp (+6)
- (modified) offload/unittests/OffloadAPI/queue/olGetQueueInfoSize.cpp (+6)
``````````diff
diff --git a/offload/liboffload/API/Queue.td b/offload/liboffload/API/Queue.td
index 7e4c5b8c68be2..1d9f6f2d11c9b 100644
--- a/offload/liboffload/API/Queue.td
+++ b/offload/liboffload/API/Queue.td
@@ -65,7 +65,8 @@ def : Enum {
let desc = "Supported queue info.";
let is_typed = 1;
let etors = [
- TaggedEtor<"DEVICE", "ol_device_handle_t", "The handle of the device associated with the queue.">
+ TaggedEtor<"DEVICE", "ol_device_handle_t", "The handle of the device associated with the queue.">,
+ TaggedEtor<"EMPTY", "bool", "True if the queue is known to be empty. May be unconditionally false if the device does not support status queries.">,
];
}
diff --git a/offload/liboffload/src/OffloadImpl.cpp b/offload/liboffload/src/OffloadImpl.cpp
index 272a12ab59a06..6122e9ea969c9 100644
--- a/offload/liboffload/src/OffloadImpl.cpp
+++ b/offload/liboffload/src/OffloadImpl.cpp
@@ -530,6 +530,12 @@ Error olGetQueueInfoImplDetail(ol_queue_handle_t Queue,
switch (PropName) {
case OL_QUEUE_INFO_DEVICE:
return Info.write<ol_device_handle_t>(Queue->Device);
+ case OL_QUEUE_INFO_EMPTY: {
+ auto Pending = Queue->Device->Device->hasPendingWork(Queue->AsyncInfo);
+ if (auto Err = Pending.takeError())
+ return Err;
+ return Info.write<bool>(!*Pending);
+ }
default:
return createOffloadError(ErrorCode::INVALID_ENUMERATION,
"olGetQueueInfo enum '%i' is invalid", PropName);
diff --git a/offload/unittests/OffloadAPI/queue/olGetQueueInfo.cpp b/offload/unittests/OffloadAPI/queue/olGetQueueInfo.cpp
index f4fb752d7ab40..2dccd33005563 100644
--- a/offload/unittests/OffloadAPI/queue/olGetQueueInfo.cpp
+++ b/offload/unittests/OffloadAPI/queue/olGetQueueInfo.cpp
@@ -20,6 +20,12 @@ TEST_P(olGetQueueInfoTest, SuccessDevice) {
ASSERT_EQ(Device, RetrievedDevice);
}
+TEST_P(olGetQueueInfoTest, SuccessEmpty) {
+ bool Empty;
+ ASSERT_SUCCESS(
+ olGetQueueInfo(Queue, OL_QUEUE_INFO_EMPTY, sizeof(Empty), &Empty));
+}
+
TEST_P(olGetQueueInfoTest, InvalidNullHandle) {
ol_device_handle_t RetrievedDevice;
ASSERT_ERROR(OL_ERRC_INVALID_NULL_HANDLE,
diff --git a/offload/unittests/OffloadAPI/queue/olGetQueueInfoSize.cpp b/offload/unittests/OffloadAPI/queue/olGetQueueInfoSize.cpp
index f1ad9fa890d71..735dad6a29384 100644
--- a/offload/unittests/OffloadAPI/queue/olGetQueueInfoSize.cpp
+++ b/offload/unittests/OffloadAPI/queue/olGetQueueInfoSize.cpp
@@ -19,6 +19,12 @@ TEST_P(olGetQueueInfoSizeTest, SuccessDevice) {
ASSERT_EQ(Size, sizeof(ol_device_handle_t));
}
+TEST_P(olGetQueueInfoSizeTest, SuccessEmpty) {
+ size_t Size = 0;
+ ASSERT_SUCCESS(olGetQueueInfoSize(Queue, OL_QUEUE_INFO_EMPTY, &Size));
+ ASSERT_EQ(Size, sizeof(bool));
+}
+
TEST_P(olGetQueueInfoSizeTest, InvalidNullHandle) {
size_t Size = 0;
ASSERT_ERROR(OL_ERRC_INVALID_NULL_HANDLE,
``````````
</details>
https://github.com/llvm/llvm-project/pull/152473
More information about the llvm-commits
mailing list