diff options
| author | Rafal Bielski <rafal.bielski@codeplay.com> | 2025-08-19 13:02:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-19 13:02:01 +0100 |
| commit | 9c9d9e4cb6dfd8a3cada7fb6c8b4dc2b77b5514c (patch) | |
| tree | 0c07d20f0f49b1b2ef60b96df3f6995b963b30c5 /offload/tools | |
| parent | fcb36ca8ccd073c110cfc44b92f78562811f2ce9 (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.cpp | 10 | ||||
| -rw-r--r-- | offload/tools/offload-tblgen/MiscGen.cpp | 14 | ||||
| -rw-r--r-- | offload/tools/offload-tblgen/RecordTypes.hpp | 2 |
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; |
