[llvm-branch-commits] [llvm] Users/adurango/iterate platforms (PR #221272)
Alex Duran via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Sep 4 09:16:38 PDT 2026
https://github.com/adurang created https://github.com/llvm/llvm-project/pull/221272
None
>From ffefd3cf7b2fd1e2fe12d126e6a8a23d60ee519f Mon Sep 17 00:00:00 2001
From: "Duran, Alex" <alejandro.duran at intel.com>
Date: Thu, 3 Sep 2026 10:39:20 -0700
Subject: [PATCH 1/2] [OFFLOAD]add olIteratePlatforms
---
offload/liboffload/API/Platform.td | 23 +++++++++++++++++++++++
offload/liboffload/src/OffloadImpl.cpp | 11 +++++++++++
2 files changed, 34 insertions(+)
diff --git a/offload/liboffload/API/Platform.td b/offload/liboffload/API/Platform.td
index 62810e8fdb7ca..65efec2b8af4a 100644
--- a/offload/liboffload/API/Platform.td
+++ b/offload/liboffload/API/Platform.td
@@ -97,3 +97,26 @@ def olPlatformRegisterRPCCallback : Function {
"RPC callback function pointer", PARAM_IN>];
let returns = [Return<"OL_ERRC_INVALID_PLATFORM">, Return<"OL_ERRC_SUCCESS">];
}
+
+def ol_platform_iterate_cb_t : FptrTypedef {
+ let desc = "User-provided function to be used with `olIteratePlatforms`";
+ let params = [
+ Param<"ol_platform_handle_t", "Platform", "the platform handle of the current iteration", PARAM_IN>,
+ Param<"void*", "UserData", "optional user data", PARAM_IN_OPTIONAL>
+ ];
+ let return = "bool";
+}
+
+def olIteratePlatforms : Function {
+ let desc = "Iterates over all available platforms, calling the callback for each platform.";
+ let details = [
+ "If the user-provided callback returns `false`, the iteration is stopped."
+ ];
+ let params = [
+ Param<"ol_platform_iterate_cb_t", "Callback", "User-provided function called for each available platform", PARAM_IN>,
+ Param<"void*", "UserData", "Optional user data to pass to the callback", PARAM_IN_OPTIONAL>
+ ];
+ let returns = [
+ Return<"OL_ERRC_INVALID_PLATFORM">
+ ];
+}
diff --git a/offload/liboffload/src/OffloadImpl.cpp b/offload/liboffload/src/OffloadImpl.cpp
index 670179c21f054..e06bd8d445bc3 100644
--- a/offload/liboffload/src/OffloadImpl.cpp
+++ b/offload/liboffload/src/OffloadImpl.cpp
@@ -468,6 +468,17 @@ Error olPlatformRegisterRPCCallback_impl(ol_platform_handle_t Platform,
return Error::success();
}
+Error olIteratePlatforms_impl(ol_platform_iterate_cb_t Callback,
+ void *UserData) {
+ for (auto &Platform : OffloadContext::get().Platforms) {
+ if (!Callback(Platform.get(), UserData)) {
+ return Error::success();
+ }
+ }
+
+ return Error::success();
+}
+
Error olGetDeviceInfoImplDetail(ol_device_handle_t Device,
ol_device_info_t PropName, size_t PropSize,
void *PropValue, size_t *PropSizeRet) {
>From 3d5895acbe4e736e78e48fc5d32f2a94b4295af8 Mon Sep 17 00:00:00 2001
From: "Duran, Alex" <alejandro.duran at intel.com>
Date: Thu, 3 Sep 2026 10:56:25 -0700
Subject: [PATCH 2/2] add test
---
.../platform/olIteratePlatforms.cpp | 45 +++++++++++++++++++
1 file changed, 45 insertions(+)
create mode 100644 offload/unittests/OffloadAPI/platform/olIteratePlatforms.cpp
diff --git a/offload/unittests/OffloadAPI/platform/olIteratePlatforms.cpp b/offload/unittests/OffloadAPI/platform/olIteratePlatforms.cpp
new file mode 100644
index 0000000000000..4f8f4e35df23b
--- /dev/null
+++ b/offload/unittests/OffloadAPI/platform/olIteratePlatforms.cpp
@@ -0,0 +1,45 @@
+//===------- Offload API tests - olIteratePlatforms -----------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "../common/Fixtures.hpp"
+#include <OffloadAPI.h>
+#include <gtest/gtest.h>
+
+using olIteratePlatformsTest = OffloadTest;
+
+TEST_F(olIteratePlatformsTest, SuccessEmptyCallback) {
+ ASSERT_SUCCESS(olIteratePlatforms(
+ [](ol_platform_handle_t, void *) { return false; }, nullptr));
+}
+
+TEST_F(olIteratePlatformsTest, SuccessGetPlatform) {
+ uint32_t PlatformCount = 0;
+ ol_platform_handle_t Platform = nullptr;
+
+ ASSERT_SUCCESS(olIteratePlatforms(
+ [](ol_platform_handle_t, void *Data) {
+ auto Count = static_cast<uint32_t *>(Data);
+ *Count += 1;
+ return true;
+ },
+ &PlatformCount));
+
+ if (PlatformCount == 0) {
+ GTEST_SKIP() << "No available platforms.";
+ }
+
+ ASSERT_SUCCESS(olIteratePlatforms(
+ [](ol_platform_handle_t P, void *Data) {
+ auto PlatformPtr = static_cast<ol_platform_handle_t *>(Data);
+ *PlatformPtr = P;
+ return true;
+ },
+ &Platform));
+
+ ASSERT_NE(Platform, nullptr);
+}
More information about the llvm-branch-commits
mailing list