summaryrefslogtreecommitdiff
path: root/offload/tools
diff options
context:
space:
mode:
authorRafal Bielski <rafal.bielski@codeplay.com>2025-08-19 13:02:01 +0100
committerGitHub <noreply@github.com>2025-08-19 13:02:01 +0100
commit9c9d9e4cb6dfd8a3cada7fb6c8b4dc2b77b5514c (patch)
tree0c07d20f0f49b1b2ef60b96df3f6995b963b30c5 /offload/tools
parentfcb36ca8ccd073c110cfc44b92f78562811f2ce9 (diff)
[Offload] Define additional device info properties (#152533)
Add the following properties in Offload device info: * VENDOR_ID * NUM_COMPUTE_UNITS * [SINGLE|DOUBLE|HALF]_FP_CONFIG * NATIVE_VECTOR_WIDTH_[CHAR|SHORT|INT|LONG|FLOAT|DOUBLE|HALF] * MAX_CLOCK_FREQUENCY * MEMORY_CLOCK_RATE * ADDRESS_BITS * MAX_MEM_ALLOC_SIZE * GLOBAL_MEM_SIZE Add a bitfield option to enumerators, allowing the values to be bit-shifted instead of incremented. Generate the per-type enums using `foreach` to reduce code duplication. Use macros in unit test definitions to reduce code duplication.
Diffstat (limited to 'offload/tools')
-rw-r--r--offload/tools/offload-tblgen/APIGen.cpp10
-rw-r--r--offload/tools/offload-tblgen/MiscGen.cpp14
-rw-r--r--offload/tools/offload-tblgen/RecordTypes.hpp2
3 files changed, 20 insertions, 6 deletions
diff --git a/offload/tools/offload-tblgen/APIGen.cpp b/offload/tools/offload-tblgen/APIGen.cpp
index 8c61d1f12de7..5a59d2a37377 100644
--- a/offload/tools/offload-tblgen/APIGen.cpp
+++ b/offload/tools/offload-tblgen/APIGen.cpp
@@ -131,7 +131,8 @@ static void ProcessEnum(const EnumRec &Enum, raw_ostream &OS) {
OS << formatv("/// @brief {0}\n", Enum.getDesc());
OS << formatv("typedef enum {0} {{\n", Enum.getName());
- uint32_t EtorVal = 0;
+ // Bitfields start from 1, other enums from 0
+ uint32_t EtorVal = Enum.isBitField();
for (const auto &EnumVal : Enum.getValues()) {
if (Enum.isTyped()) {
OS << MakeComment(
@@ -141,7 +142,12 @@ static void ProcessEnum(const EnumRec &Enum, raw_ostream &OS) {
OS << MakeComment(EnumVal.getDesc());
}
OS << formatv(TAB_1 "{0}_{1} = {2},\n", Enum.getEnumValNamePrefix(),
- EnumVal.getName(), EtorVal++);
+ EnumVal.getName(), EtorVal);
+ if (Enum.isBitField()) {
+ EtorVal <<= 1u;
+ } else {
+ ++EtorVal;
+ }
}
// Add last_element/force uint32 val
diff --git a/offload/tools/offload-tblgen/MiscGen.cpp b/offload/tools/offload-tblgen/MiscGen.cpp
index b90e5cfdec8b..17378331242a 100644
--- a/offload/tools/offload-tblgen/MiscGen.cpp
+++ b/offload/tools/offload-tblgen/MiscGen.cpp
@@ -107,10 +107,16 @@ void EmitOffloadInfo(const RecordKeeper &Records, raw_ostream &OS) {
)";
- auto ErrorCodeEnum = EnumRec{Records.getDef("DeviceInfo")};
- uint32_t EtorVal = 0;
- for (const auto &EnumVal : ErrorCodeEnum.getValues()) {
+ auto Enum = EnumRec{Records.getDef("DeviceInfo")};
+ // Bitfields start from 1, other enums from 0
+ uint32_t EtorVal = Enum.isBitField();
+ for (const auto &EnumVal : Enum.getValues()) {
OS << formatv(TAB_1 "OFFLOAD_DEVINFO({0}, \"{1}\", {2})\n",
- EnumVal.getName(), EnumVal.getDesc(), EtorVal++);
+ EnumVal.getName(), EnumVal.getDesc(), EtorVal);
+ if (Enum.isBitField()) {
+ EtorVal <<= 1u;
+ } else {
+ ++EtorVal;
+ }
}
}
diff --git a/offload/tools/offload-tblgen/RecordTypes.hpp b/offload/tools/offload-tblgen/RecordTypes.hpp
index 65c0a4ce4a2c..1cde8b84c306 100644
--- a/offload/tools/offload-tblgen/RecordTypes.hpp
+++ b/offload/tools/offload-tblgen/RecordTypes.hpp
@@ -92,6 +92,8 @@ public:
bool isTyped() const { return rec->getValueAsBit("is_typed"); }
+ bool isBitField() const { return rec->getValueAsBit("is_bit_field"); }
+
private:
const Record *rec;
std::vector<EnumValueRec> vals;