[RISCV][TableGen] Use getAllDerivedDefinitions in RISCVTargetDefEmitter to simplify...
authorCraig Topper <craig.topper@sifive.com>
Fri, 20 Jan 2023 08:20:13 +0000 (00:20 -0800)
committerCraig Topper <craig.topper@sifive.com>
Fri, 20 Jan 2023 08:34:05 +0000 (00:34 -0800)
llvm/utils/TableGen/RISCVTargetDefEmitter.cpp

index db38ec8..f513bd4 100644 (file)
@@ -59,31 +59,24 @@ static std::string getEnumFeatures(int XLen) {
 }
 
 void llvm::EmitRISCVTargetDef(const RecordKeeper &RK, raw_ostream &OS) {
-  using MapTy = std::pair<const std::string, std::unique_ptr<llvm::Record>>;
-  using RecordMap = std::map<std::string, std::unique_ptr<Record>, std::less<>>;
-  const RecordMap &Map = RK.getDefs();
-
   OS << "#ifndef PROC\n"
      << "#define PROC(ENUM, NAME, FEATURES, DEFAULT_MARCH)\n"
      << "#endif\n\n";
 
   OS << "PROC(INVALID, {\"invalid\"}, FK_INVALID, {\"\"})\n";
   // Iterate on all definition records.
-  for (const MapTy &Def : Map) {
-    const Record &Rec = *(Def.second);
-    if (Rec.isSubClassOf("RISCVProcessorModel")) {
-      int XLen = getXLen(Rec);
-      std::string MArch = Rec.getValueAsString("DefaultMarch").str();
-
-      // Compute MArch from features if we don't specify it.
-      if (MArch.empty())
-        MArch = getMArch(XLen, Rec);
-
-      OS << "PROC(" << Rec.getName() << ", "
-         << "{\"" << Rec.getValueAsString("Name") << "\"},"
-         << getEnumFeatures(XLen) << ", "
-         << "{\"" << MArch << "\"})\n";
-    }
+  for (const Record *Rec : RK.getAllDerivedDefinitions("RISCVProcessorModel")) {
+    int XLen = getXLen(*Rec);
+    std::string MArch = Rec->getValueAsString("DefaultMarch").str();
+
+    // Compute MArch from features if we don't specify it.
+    if (MArch.empty())
+      MArch = getMArch(XLen, *Rec);
+
+    OS << "PROC(" << Rec->getName() << ", "
+       << "{\"" << Rec->getValueAsString("Name") << "\"},"
+       << getEnumFeatures(XLen) << ", "
+       << "{\"" << MArch << "\"})\n";
   }
   OS << "\n#undef PROC\n";
   OS << "\n";
@@ -91,11 +84,11 @@ void llvm::EmitRISCVTargetDef(const RecordKeeper &RK, raw_ostream &OS) {
      << "#define TUNE_PROC(ENUM, NAME)\n"
      << "#endif\n\n";
   OS << "TUNE_PROC(GENERIC, \"generic\")\n";
-  for (const MapTy &Def : Map) {
-    const Record &Rec = *(Def.second);
-    if (Rec.isSubClassOf("RISCVTuneProcessorModel"))
-      OS << "TUNE_PROC(" << Rec.getName() << ", "
-         << "\"" << Rec.getValueAsString("Name") << "\")\n";
+
+  for (const Record *Rec :
+       RK.getAllDerivedDefinitions("RISCVTuneProcessorModel")) {
+    OS << "TUNE_PROC(" << Rec->getName() << ", "
+       << "\"" << Rec->getValueAsString("Name") << "\")\n";
   }
 
   OS << "\n#undef TUNE_PROC\n";