[llvm] [Offload] Generate OffloadInfo.inc (PR #147316)

Ross Brunton via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 7 08:16:33 PDT 2025


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

This is a generated file which contains a macro for all Device Info
keys. This is visible to the plugin interface so that it can use the
definitions in a future patch.


>From 64ad99048062fc0ff971e1177589489a25486807 Mon Sep 17 00:00:00 2001
From: Ross Brunton <ross at codeplay.com>
Date: Mon, 7 Jul 2025 16:07:49 +0100
Subject: [PATCH] [Offload] Generate OffloadInfo.inc

This is a generated file which contains a macro for all Device Info
keys. This is visible to the plugin interface so that it can use the
definitions in a future patch.
---
 offload/liboffload/API/Device.td              |  2 +-
 offload/plugins-nextgen/common/CMakeLists.txt |  1 +
 offload/tools/offload-tblgen/Generators.hpp   |  1 +
 offload/tools/offload-tblgen/MiscGen.cpp      | 21 +++++++++++++++++++
 .../tools/offload-tblgen/offload-tblgen.cpp   |  7 ++++++-
 5 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/offload/liboffload/API/Device.td b/offload/liboffload/API/Device.td
index 94bd6cbf0e5be..37f4e815d90c3 100644
--- a/offload/liboffload/API/Device.td
+++ b/offload/liboffload/API/Device.td
@@ -22,7 +22,7 @@ def : Enum {
   ];
 }
 
-def : Enum {
+def DeviceInfo : Enum {
   let name = "ol_device_info_t";
   let desc = "Supported device info.";
   let is_typed = 1;
diff --git a/offload/plugins-nextgen/common/CMakeLists.txt b/offload/plugins-nextgen/common/CMakeLists.txt
index 8c171df923823..ea0910abf95d5 100644
--- a/offload/plugins-nextgen/common/CMakeLists.txt
+++ b/offload/plugins-nextgen/common/CMakeLists.txt
@@ -4,6 +4,7 @@ include(TableGen)
 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include)
 set(LLVM_TARGET_DEFINITIONS ${CMAKE_CURRENT_SOURCE_DIR}/../../liboffload/API/OffloadAPI.td)
 tablegen(OFFLOAD include/OffloadErrcodes.inc -gen-errcodes -I ${CMAKE_CURRENT_SOURCE_DIR}/../../liboffload/API)
+tablegen(OFFLOAD include/OffloadInfo.inc -gen-info -I ${CMAKE_CURRENT_SOURCE_DIR}/../../liboffload/API)
 add_public_tablegen_target(PluginErrcodes)
 
 # NOTE: Don't try to build `PluginInterface` using `add_llvm_library` because we
diff --git a/offload/tools/offload-tblgen/Generators.hpp b/offload/tools/offload-tblgen/Generators.hpp
index f3474dfc52e86..3f94fc47c6b21 100644
--- a/offload/tools/offload-tblgen/Generators.hpp
+++ b/offload/tools/offload-tblgen/Generators.hpp
@@ -23,3 +23,4 @@ void EmitOffloadExports(const llvm::RecordKeeper &Records,
                         llvm::raw_ostream &OS);
 void EmitOffloadErrcodes(const llvm::RecordKeeper &Records,
                          llvm::raw_ostream &OS);
+void EmitOffloadInfo(const llvm::RecordKeeper &Records, llvm::raw_ostream &OS);
diff --git a/offload/tools/offload-tblgen/MiscGen.cpp b/offload/tools/offload-tblgen/MiscGen.cpp
index 14787729503e9..b90e5cfdec8b2 100644
--- a/offload/tools/offload-tblgen/MiscGen.cpp
+++ b/offload/tools/offload-tblgen/MiscGen.cpp
@@ -93,3 +93,24 @@ void EmitOffloadErrcodes(const RecordKeeper &Records, raw_ostream &OS) {
                   EnumVal.getDesc(), EtorVal++);
   }
 }
+
+// Emit macro calls for each info
+void EmitOffloadInfo(const RecordKeeper &Records, raw_ostream &OS) {
+  OS << GenericHeader;
+  OS << R"(
+#ifndef OFFLOAD_DEVINFO
+#error Please define the macro OFFLOAD_DEVINFO(Name, Desc, Value)
+#endif
+
+// Device info codes are shared between PluginInterface and liboffload.
+// To add new error codes, add them to offload/liboffload/API/Device.td.
+
+)";
+
+  auto ErrorCodeEnum = EnumRec{Records.getDef("DeviceInfo")};
+  uint32_t EtorVal = 0;
+  for (const auto &EnumVal : ErrorCodeEnum.getValues()) {
+    OS << formatv(TAB_1 "OFFLOAD_DEVINFO({0}, \"{1}\", {2})\n",
+                  EnumVal.getName(), EnumVal.getDesc(), EtorVal++);
+  }
+}
diff --git a/offload/tools/offload-tblgen/offload-tblgen.cpp b/offload/tools/offload-tblgen/offload-tblgen.cpp
index 83a4af04b8b22..ee7f6d4d79bff 100644
--- a/offload/tools/offload-tblgen/offload-tblgen.cpp
+++ b/offload/tools/offload-tblgen/offload-tblgen.cpp
@@ -32,6 +32,7 @@ enum ActionType {
   GenPrintHeader,
   GenExports,
   GenErrcodes,
+  GenInfo,
 };
 
 namespace {
@@ -55,7 +56,8 @@ cl::opt<ActionType> Action(
         clEnumValN(GenExports, "gen-exports",
                    "Generate export file for the Offload library"),
         clEnumValN(GenErrcodes, "gen-errcodes",
-                   "Generate Offload Error Code enum")));
+                   "Generate Offload Error Code enum"),
+        clEnumValN(GenInfo, "gen-info", "Generate Offload Info enum")));
 }
 
 static bool OffloadTableGenMain(raw_ostream &OS, const RecordKeeper &Records) {
@@ -87,6 +89,9 @@ static bool OffloadTableGenMain(raw_ostream &OS, const RecordKeeper &Records) {
   case GenErrcodes:
     EmitOffloadErrcodes(Records, OS);
     break;
+  case GenInfo:
+    EmitOffloadInfo(Records, OS);
+    break;
   }
 
   return false;



More information about the llvm-commits mailing list