[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