[llvm] [Offload] Define additional device info properties (PR #152533)

Ross Brunton via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 8 01:57:12 PDT 2025


================
@@ -131,17 +131,32 @@ 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;
+  uint32_t EtorVal = Enum.isBitField();
   for (const auto &EnumVal : Enum.getValues()) {
-    if (Enum.isTyped()) {
-      OS << MakeComment(
-          formatv("[{0}] {1}", EnumVal.getTaggedType(), EnumVal.getDesc())
-              .str());
-    } else {
-      OS << MakeComment(EnumVal.getDesc());
-    }
-    OS << formatv(TAB_1 "{0}_{1} = {2},\n", Enum.getEnumValNamePrefix(),
-                  EnumVal.getName(), EtorVal++);
+    size_t NumTemplateValues{EnumVal.getTemplateValues().size()};
+    size_t TemplateIndex{
----------------
RossBrunton wrote:

I think this would be clearer as something like this:

```c++
uint32_t EtorVal = Enum.isBitField();
auto Print = [&](std::string &&Name, std::string &&Desc) {
  if (Enum.isTyped()) {
    OS << MakeComment(
        formatv("[{0}] {1}", EnumVal.getTaggedType(), Desc).str());
  } else {
    OS << MakeComment(Desc);
  }
  OS << formatv(TAB_1 "{0}_{1} = {2},\n", Enum.getEnumValNamePrefix(), Name,
                EtorVal);
  if (Enum.isBitField()) {
    EtorVal <<= 1u;
  } else {
    ++EtorVal;
  }
};

for (const auto &EnumVal : Enum.getValues()) {
  size_t NumTemplateValues{EnumVal.getTemplateValues().size()};
  if (NumTemplateValues) {
    for (size_t TemplateIndex = 0; TemplateIndex < NumTemplateValues; TemplateIndex ++) {
      Print(EnumVal.getTemplateName(TemplateIndex), EnumVal.getTemplateDesc(TemplateIndex));
    }
  } else {
    Print(EnumVal.getName(), EnumVal.getDesc());
  }
}
```

https://github.com/llvm/llvm-project/pull/152533


More information about the llvm-commits mailing list