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" <[email protected]> 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" <[email protected]> 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); +} _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
