[llvm] [Offload] Fix `OL_DEVICE_INFO_MAX_MEM_ALLOC_SIZE` on AMD (PR #154521)

Ross Brunton via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 20 05:13:29 PDT 2025


https://github.com/RossBrunton created https://github.com/llvm/llvm-project/pull/154521

This wasn't handled with the normal info API, so needs special handling.


>From 1c669b3711ee2b547d70d20586fdd81dffe9dc8d Mon Sep 17 00:00:00 2001
From: Ross Brunton <ross at codeplay.com>
Date: Wed, 20 Aug 2025 13:12:26 +0100
Subject: [PATCH] [Offload] Fix `OL_DEVICE_INFO_MAX_MEM_ALLOC_SIZE` on AMD

This wasn't handled with the normal info API, so needs special handling.
---
 offload/liboffload/src/OffloadImpl.cpp | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/offload/liboffload/src/OffloadImpl.cpp b/offload/liboffload/src/OffloadImpl.cpp
index 54c6d452cbd9e..5374b87ee63f6 100644
--- a/offload/liboffload/src/OffloadImpl.cpp
+++ b/offload/liboffload/src/OffloadImpl.cpp
@@ -339,8 +339,15 @@ Error olGetDeviceInfoImplDetail(ol_device_handle_t Device,
   // None of the existing plugins specify a limit on a single allocation,
   // so return the global memory size instead
   case OL_DEVICE_INFO_MAX_MEM_ALLOC_SIZE:
-    PropName = OL_DEVICE_INFO_GLOBAL_MEM_SIZE;
-    break;
+    [[fallthrough]];
+  // AMD doesn't provide the global memory size (trivially) with the device info
+  // struct, so use the plugin interface
+  case OL_DEVICE_INFO_GLOBAL_MEM_SIZE: {
+    uint64_t Mem;
+    if (auto Err = Device->Device->getDeviceMemorySize(Mem))
+      return Err;
+    return Info.write<uint64_t>(Mem);
+  } break;
 
   default:
     break;
@@ -368,14 +375,6 @@ Error olGetDeviceInfoImplDetail(ol_device_handle_t Device,
     return Info.writeString(std::get<std::string>(Entry->Value).c_str());
   }
 
-  case OL_DEVICE_INFO_GLOBAL_MEM_SIZE: {
-    // Uint64 values
-    if (!std::holds_alternative<uint64_t>(Entry->Value))
-      return makeError(ErrorCode::BACKEND_FAILURE,
-                       "plugin returned incorrect type");
-    return Info.write(std::get<uint64_t>(Entry->Value));
-  }
-
   case OL_DEVICE_INFO_MAX_WORK_GROUP_SIZE:
   case OL_DEVICE_INFO_VENDOR_ID:
   case OL_DEVICE_INFO_NUM_COMPUTE_UNITS:



More information about the llvm-commits mailing list