[libc] [llvm] [LIBC][TableGen] Migrate libc-hdrgen backend to use const RecordKeeper (PR #107542)

Rahul Joshi via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 6 01:07:36 PDT 2024


https://github.com/jurahul created https://github.com/llvm/llvm-project/pull/107542

None

>From 1264fd891007bb8f355f143c5849c082278fa1be Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Fri, 6 Sep 2024 01:05:34 -0700
Subject: [PATCH] [LIBC][TableGen] Migrate libc-hdrgen backend to use const
 RecordKeeper

---
 libc/utils/HdrGen/Command.h                   |  2 +-
 libc/utils/HdrGen/Generator.cpp               | 15 +++---
 libc/utils/HdrGen/Generator.h                 |  4 +-
 libc/utils/HdrGen/IncludeFileCommand.cpp      |  2 +-
 libc/utils/HdrGen/IncludeFileCommand.h        |  2 +-
 .../PrototypeTestGen/PrototypeTestGen.cpp     |  3 +-
 libc/utils/HdrGen/PublicAPICommand.cpp        | 41 ++++++++--------
 libc/utils/HdrGen/PublicAPICommand.h          |  2 +-
 libc/utils/LibcTableGenUtil/APIIndexer.cpp    | 26 +++++-----
 libc/utils/LibcTableGenUtil/APIIndexer.h      | 48 ++++++++++---------
 llvm/include/llvm/TableGen/Record.h           |  2 +-
 llvm/lib/TableGen/Record.cpp                  |  2 +-
 12 files changed, 76 insertions(+), 73 deletions(-)

diff --git a/libc/utils/HdrGen/Command.h b/libc/utils/HdrGen/Command.h
index 895f472c3ad32d..42516798ffaec0 100644
--- a/libc/utils/HdrGen/Command.h
+++ b/libc/utils/HdrGen/Command.h
@@ -45,7 +45,7 @@ class Command {
   virtual ~Command();
 
   virtual void run(llvm::raw_ostream &OS, const ArgVector &Args,
-                   llvm::StringRef StdHeader, llvm::RecordKeeper &Records,
+                   llvm::StringRef StdHeader, const llvm::RecordKeeper &Records,
                    const ErrorReporter &Reporter) const = 0;
 };
 
diff --git a/libc/utils/HdrGen/Generator.cpp b/libc/utils/HdrGen/Generator.cpp
index d926d5d9ac3c8d..b4e1166b1a37b2 100644
--- a/libc/utils/HdrGen/Generator.cpp
+++ b/libc/utils/HdrGen/Generator.cpp
@@ -64,7 +64,8 @@ void Generator::parseCommandArgs(llvm::StringRef ArgStr, ArgVector &Args) {
   }
 }
 
-void Generator::generate(llvm::raw_ostream &OS, llvm::RecordKeeper &Records) {
+void Generator::generate(llvm::raw_ostream &OS,
+                         const llvm::RecordKeeper &Records) {
   auto DefFileBuffer = llvm::MemoryBuffer::getFile(HeaderDefFile);
   if (!DefFileBuffer) {
     llvm::errs() << "Unable to open " << HeaderDefFile << ".\n";
@@ -126,7 +127,7 @@ void Generator::generate(llvm::raw_ostream &OS, llvm::RecordKeeper &Records) {
 }
 
 void Generator::generateDecls(llvm::raw_ostream &OS,
-                              llvm::RecordKeeper &Records) {
+                              const llvm::RecordKeeper &Records) {
 
   OS << "//===-- C standard declarations for " << StdHeader << " "
      << std::string(80 - (42 + StdHeader.size()), '-') << "===//\n"
@@ -161,15 +162,15 @@ void Generator::generateDecls(llvm::raw_ostream &OS,
     if (G.FunctionSpecMap.find(Name) == G.FunctionSpecMap.end())
       continue;
 
-    llvm::Record *FunctionSpec = G.FunctionSpecMap[Name];
-    llvm::Record *RetValSpec = FunctionSpec->getValueAsDef("Return");
-    llvm::Record *ReturnType = RetValSpec->getValueAsDef("ReturnType");
+    const llvm::Record *FunctionSpec = G.FunctionSpecMap[Name];
+    const llvm::Record *RetValSpec = FunctionSpec->getValueAsDef("Return");
+    const llvm::Record *ReturnType = RetValSpec->getValueAsDef("ReturnType");
 
     OS << G.getTypeAsString(ReturnType) << " " << Name << "(";
 
     auto ArgsList = FunctionSpec->getValueAsListOfDefs("Args");
     for (size_t i = 0; i < ArgsList.size(); ++i) {
-      llvm::Record *ArgType = ArgsList[i]->getValueAsDef("ArgType");
+      const llvm::Record *ArgType = ArgsList[i]->getValueAsDef("ArgType");
       OS << G.getTypeAsString(ArgType);
       if (i < ArgsList.size() - 1)
         OS << ", ";
@@ -182,7 +183,7 @@ void Generator::generateDecls(llvm::raw_ostream &OS,
   for (const auto &Name : EntrypointNameList) {
     if (G.ObjectSpecMap.find(Name) == G.ObjectSpecMap.end())
       continue;
-    llvm::Record *ObjectSpec = G.ObjectSpecMap[Name];
+    const llvm::Record *ObjectSpec = G.ObjectSpecMap[Name];
     auto Type = ObjectSpec->getValueAsString("Type");
     OS << "extern " << Type << " " << Name << " __LIBC_ATTRS;\n";
   }
diff --git a/libc/utils/HdrGen/Generator.h b/libc/utils/HdrGen/Generator.h
index 76a8a110832112..1c149d21156407 100644
--- a/libc/utils/HdrGen/Generator.h
+++ b/libc/utils/HdrGen/Generator.h
@@ -51,8 +51,8 @@ class Generator {
       : HeaderDefFile(DefFile), EntrypointNameList(EN), StdHeader(Header),
         ArgMap(Map) {}
 
-  void generate(llvm::raw_ostream &OS, llvm::RecordKeeper &Records);
-  void generateDecls(llvm::raw_ostream &OS, llvm::RecordKeeper &Records);
+  void generate(llvm::raw_ostream &OS, const llvm::RecordKeeper &Records);
+  void generateDecls(llvm::raw_ostream &OS, const llvm::RecordKeeper &Records);
 };
 
 } // namespace llvm_libc
diff --git a/libc/utils/HdrGen/IncludeFileCommand.cpp b/libc/utils/HdrGen/IncludeFileCommand.cpp
index 02cfb65b06b200..43efe43585eb20 100644
--- a/libc/utils/HdrGen/IncludeFileCommand.cpp
+++ b/libc/utils/HdrGen/IncludeFileCommand.cpp
@@ -19,7 +19,7 @@ const char IncludeFileCommand::Name[] = "include_file";
 
 void IncludeFileCommand::run(llvm::raw_ostream &OS, const ArgVector &Args,
                              llvm::StringRef StdHeader,
-                             llvm::RecordKeeper &Records,
+                             const llvm::RecordKeeper &Records,
                              const Command::ErrorReporter &Reporter) const {
   if (Args.size() != 1) {
     Reporter.printFatalError(
diff --git a/libc/utils/HdrGen/IncludeFileCommand.h b/libc/utils/HdrGen/IncludeFileCommand.h
index 240e803a7dc2b4..b3a6ff5462ded0 100644
--- a/libc/utils/HdrGen/IncludeFileCommand.h
+++ b/libc/utils/HdrGen/IncludeFileCommand.h
@@ -23,7 +23,7 @@ class IncludeFileCommand : public Command {
   static const char Name[];
 
   void run(llvm::raw_ostream &OS, const ArgVector &Args,
-           llvm::StringRef StdHeader, llvm::RecordKeeper &Records,
+           llvm::StringRef StdHeader, const llvm::RecordKeeper &Records,
            const Command::ErrorReporter &Reporter) const override;
 };
 
diff --git a/libc/utils/HdrGen/PrototypeTestGen/PrototypeTestGen.cpp b/libc/utils/HdrGen/PrototypeTestGen/PrototypeTestGen.cpp
index 551b97caf81fd6..7acaf75c4c1c8b 100644
--- a/libc/utils/HdrGen/PrototypeTestGen/PrototypeTestGen.cpp
+++ b/libc/utils/HdrGen/PrototypeTestGen/PrototypeTestGen.cpp
@@ -21,7 +21,8 @@ llvm::cl::list<std::string>
 
 } // anonymous namespace
 
-bool TestGeneratorMain(llvm::raw_ostream &OS, llvm::RecordKeeper &records) {
+bool TestGeneratorMain(llvm::raw_ostream &OS,
+                       const llvm::RecordKeeper &records) {
   OS << "#include \"src/__support/CPP/type_traits.h\"\n";
   llvm_libc::APIIndexer G(records);
   std::unordered_set<std::string> headerFileSet;
diff --git a/libc/utils/HdrGen/PublicAPICommand.cpp b/libc/utils/HdrGen/PublicAPICommand.cpp
index 37cd3b7ea77565..2a7f63eb25c722 100644
--- a/libc/utils/HdrGen/PublicAPICommand.cpp
+++ b/libc/utils/HdrGen/PublicAPICommand.cpp
@@ -70,7 +70,7 @@ static bool isAsciiIdentifier(llvm::StringRef S) {
   return true;
 }
 
-static AttributeStyle getAttributeStyle(llvm::Record *Instance) {
+static AttributeStyle getAttributeStyle(const llvm::Record *Instance) {
   llvm::StringRef Style = Instance->getValueAsString("Style");
   return llvm::StringSwitch<AttributeStyle>(Style)
       .Case("cxx11", AttributeStyle::Cxx11)
@@ -79,7 +79,7 @@ static AttributeStyle getAttributeStyle(llvm::Record *Instance) {
       .Default(AttributeStyle::Gnu);
 }
 
-static AttributeNamespace getAttributeNamespace(llvm::Record *Instance) {
+static AttributeNamespace getAttributeNamespace(const llvm::Record *Instance) {
   llvm::StringRef Namespace = Instance->getValueAsString("Namespace");
   return llvm::StringSwitch<AttributeNamespace>(Namespace)
       .Case("clang", AttributeNamespace::Clang)
@@ -87,21 +87,20 @@ static AttributeNamespace getAttributeNamespace(llvm::Record *Instance) {
       .Default(AttributeNamespace::None);
 }
 
-using AttributeMap = llvm::DenseMap<llvm::StringRef, llvm::Record *>;
+using AttributeMap = llvm::DenseMap<llvm::StringRef, const llvm::Record *>;
 
 template <class SpecMap, class FuncList>
 static AttributeMap collectAttributeMacros(const SpecMap &Spec,
                                            const FuncList &Funcs) {
-  llvm::DenseMap<llvm::StringRef, llvm::Record *> MacroAttr;
+  llvm::DenseMap<llvm::StringRef, const llvm::Record *> MacroAttr;
   for (const auto &Name : Funcs) {
     auto Iter = Spec.find(Name);
     if (Iter == Spec.end())
       continue;
 
-    llvm::Record *FunctionSpec = Iter->second;
-    std::vector<llvm::Record *> Attributes =
-        FunctionSpec->getValueAsListOfDefs("Attributes");
-    for (llvm::Record *Attr : Attributes)
+    const llvm::Record *FunctionSpec = Iter->second;
+    for (const llvm::Record *Attr :
+         FunctionSpec->getValueAsListOfDefs("Attributes"))
       MacroAttr[Attr->getValueAsString("Macro")] = Attr;
   }
   return MacroAttr;
@@ -112,11 +111,11 @@ static void emitAttributeMacroDecls(const AttributeMap &MacroAttr,
   for (auto &[Macro, Attr] : MacroAttr) {
     std::vector<llvm::Record *> Instances =
         Attr->getValueAsListOfDefs("Instances");
-    llvm::SmallVector<std::pair<AttributeStyle, llvm::Record *>> Styles;
+    llvm::SmallVector<std::pair<AttributeStyle, const llvm::Record *>> Styles;
     std::transform(Instances.begin(), Instances.end(),
                    std::back_inserter(Styles),
-                   [&](llvm::Record *Instance)
-                       -> std::pair<AttributeStyle, llvm::Record *> {
+                   [&](const llvm::Record *Instance)
+                       -> std::pair<AttributeStyle, const llvm::Record *> {
                      auto Style = getAttributeStyle(Instance);
                      return {Style, Instance};
                    });
@@ -195,7 +194,7 @@ static void emitAttributeMacroForFunction(const llvm::Record *FunctionSpec,
       FunctionSpec->getValueAsListOfDefs("Attributes");
   llvm::interleave(
       Attributes.begin(), Attributes.end(),
-      [&](llvm::Record *Attr) { OS << Attr->getValueAsString("Macro"); },
+      [&](const llvm::Record *Attr) { OS << Attr->getValueAsString("Macro"); },
       [&]() { OS << ' '; });
   if (!Attributes.empty())
     OS << ' ';
@@ -217,7 +216,7 @@ static void writeAPIFromIndex(APIIndexer &G,
     if (!G.MacroSpecMap.count(Name))
       llvm::PrintFatalError(Name + " not found in any standard spec.\n");
 
-    llvm::Record *MacroDef = Pair.second;
+    const llvm::Record *MacroDef = Pair.second;
     dedentAndWrite(MacroDef->getValueAsString("Defn"), OS);
 
     OS << '\n';
@@ -237,7 +236,7 @@ static void writeAPIFromIndex(APIIndexer &G,
       llvm::PrintFatalError(
           Name + " is not listed as an enumeration in any standard spec.\n");
 
-    llvm::Record *EnumerationSpec = G.EnumerationSpecMap[Name];
+    const llvm::Record *EnumerationSpec = G.EnumerationSpecMap[Name];
     OS << "  " << EnumerationSpec->getValueAsString("Name");
     auto Value = EnumerationSpec->getValueAsString("Value");
     if (Value == "__default__") {
@@ -267,9 +266,9 @@ static void writeAPIFromIndex(APIIndexer &G,
     if (Iter == G.FunctionSpecMap.end())
       continue;
 
-    llvm::Record *FunctionSpec = Iter->second;
-    llvm::Record *RetValSpec = FunctionSpec->getValueAsDef("Return");
-    llvm::Record *ReturnType = RetValSpec->getValueAsDef("ReturnType");
+    const llvm::Record *FunctionSpec = Iter->second;
+    const llvm::Record *RetValSpec = FunctionSpec->getValueAsDef("Return");
+    const llvm::Record *ReturnType = RetValSpec->getValueAsDef("ReturnType");
 
     // TODO: https://github.com/llvm/llvm-project/issues/81208
     //   Ideally, we should group functions based on their guarding macros.
@@ -285,7 +284,7 @@ static void writeAPIFromIndex(APIIndexer &G,
 
     auto ArgsList = FunctionSpec->getValueAsListOfDefs("Args");
     for (size_t i = 0; i < ArgsList.size(); ++i) {
-      llvm::Record *ArgType = ArgsList[i]->getValueAsDef("ArgType");
+      const llvm::Record *ArgType = ArgsList[i]->getValueAsDef("ArgType");
       OS << G.getTypeAsString(ArgType);
       if (i < ArgsList.size() - 1)
         OS << ", ";
@@ -304,7 +303,7 @@ static void writeAPIFromIndex(APIIndexer &G,
     auto Iter = G.ObjectSpecMap.find(Name);
     if (Iter == G.ObjectSpecMap.end())
       continue;
-    llvm::Record *ObjectSpec = Iter->second;
+    const llvm::Record *ObjectSpec = Iter->second;
     auto Type = ObjectSpec->getValueAsString("Type");
     OS << "extern " << Type << " " << Name << ";\n";
   }
@@ -314,13 +313,13 @@ static void writeAPIFromIndex(APIIndexer &G,
   emitUndefsForAttributeMacros(MacroAttr, OS);
 }
 
-void writePublicAPI(llvm::raw_ostream &OS, llvm::RecordKeeper &Records) {}
+void writePublicAPI(llvm::raw_ostream &OS, const llvm::RecordKeeper &Records) {}
 
 const char PublicAPICommand::Name[] = "public_api";
 
 void PublicAPICommand::run(llvm::raw_ostream &OS, const ArgVector &Args,
                            llvm::StringRef StdHeader,
-                           llvm::RecordKeeper &Records,
+                           const llvm::RecordKeeper &Records,
                            const Command::ErrorReporter &Reporter) const {
   if (Args.size() != 0)
     Reporter.printFatalError("public_api command does not take any arguments.");
diff --git a/libc/utils/HdrGen/PublicAPICommand.h b/libc/utils/HdrGen/PublicAPICommand.h
index 41aa53e51c3269..49078f4857f900 100644
--- a/libc/utils/HdrGen/PublicAPICommand.h
+++ b/libc/utils/HdrGen/PublicAPICommand.h
@@ -39,7 +39,7 @@ class PublicAPICommand : public Command {
       : EntrypointNameList(EntrypointNames) {}
 
   void run(llvm::raw_ostream &OS, const ArgVector &Args,
-           llvm::StringRef StdHeader, llvm::RecordKeeper &Records,
+           llvm::StringRef StdHeader, const llvm::RecordKeeper &Records,
            const Command::ErrorReporter &Reporter) const override;
 };
 
diff --git a/libc/utils/LibcTableGenUtil/APIIndexer.cpp b/libc/utils/LibcTableGenUtil/APIIndexer.cpp
index deb82a4f95e96a..65814b96f7f43e 100644
--- a/libc/utils/LibcTableGenUtil/APIIndexer.cpp
+++ b/libc/utils/LibcTableGenUtil/APIIndexer.cpp
@@ -24,7 +24,7 @@ static const char StructTypeClassName[] = "Struct";
 static const char StandardSpecClassName[] = "StandardSpec";
 static const char PublicAPIClassName[] = "PublicAPI";
 
-static bool isa(llvm::Record *Def, llvm::Record *TypeClass) {
+static bool isa(const llvm::Record *Def, const llvm::Record *TypeClass) {
   llvm::RecordRecTy *RecordType = Def->getType();
   llvm::ArrayRef<llvm::Record *> Classes = RecordType->getClasses();
   // We want exact types. That is, we don't want the classes listed in
@@ -35,35 +35,35 @@ static bool isa(llvm::Record *Def, llvm::Record *TypeClass) {
   return Classes[0] == TypeClass;
 }
 
-bool APIIndexer::isaNamedType(llvm::Record *Def) {
+bool APIIndexer::isaNamedType(const llvm::Record *Def) {
   return isa(Def, NamedTypeClass);
 }
 
-bool APIIndexer::isaStructType(llvm::Record *Def) {
+bool APIIndexer::isaStructType(const llvm::Record *Def) {
   return isa(Def, StructClass);
 }
 
-bool APIIndexer::isaPtrType(llvm::Record *Def) {
+bool APIIndexer::isaPtrType(const llvm::Record *Def) {
   return isa(Def, PtrTypeClass);
 }
 
-bool APIIndexer::isaConstType(llvm::Record *Def) {
+bool APIIndexer::isaConstType(const llvm::Record *Def) {
   return isa(Def, ConstTypeClass);
 }
 
-bool APIIndexer::isaRestrictedPtrType(llvm::Record *Def) {
+bool APIIndexer::isaRestrictedPtrType(const llvm::Record *Def) {
   return isa(Def, RestrictedPtrTypeClass);
 }
 
-bool APIIndexer::isaStandardSpec(llvm::Record *Def) {
+bool APIIndexer::isaStandardSpec(const llvm::Record *Def) {
   return isa(Def, StandardSpecClass);
 }
 
-bool APIIndexer::isaPublicAPI(llvm::Record *Def) {
+bool APIIndexer::isaPublicAPI(const llvm::Record *Def) {
   return isa(Def, PublicAPIClass);
 }
 
-std::string APIIndexer::getTypeAsString(llvm::Record *TypeRecord) {
+std::string APIIndexer::getTypeAsString(const llvm::Record *TypeRecord) {
   if (isaNamedType(TypeRecord) || isaStructType(TypeRecord)) {
     return std::string(TypeRecord->getValueAsString("Name"));
   } else if (isaPtrType(TypeRecord)) {
@@ -79,7 +79,7 @@ std::string APIIndexer::getTypeAsString(llvm::Record *TypeRecord) {
   }
 }
 
-void APIIndexer::indexStandardSpecDef(llvm::Record *StandardSpec) {
+void APIIndexer::indexStandardSpecDef(const llvm::Record *StandardSpec) {
   auto HeaderSpecList = StandardSpec->getValueAsListOfDefs("Headers");
   for (llvm::Record *HeaderSpec : HeaderSpecList) {
     llvm::StringRef Header = HeaderSpec->getValueAsString("Name");
@@ -119,7 +119,7 @@ void APIIndexer::indexStandardSpecDef(llvm::Record *StandardSpec) {
   }
 }
 
-void APIIndexer::indexPublicAPIDef(llvm::Record *PublicAPI) {
+void APIIndexer::indexPublicAPIDef(const llvm::Record *PublicAPI) {
   // While indexing the public API, we do not check if any of the entities
   // requested is from an included standard. Such a check is done while
   // generating the API.
@@ -148,7 +148,7 @@ void APIIndexer::indexPublicAPIDef(llvm::Record *PublicAPI) {
     Objects.insert(std::string(ObjectName));
 }
 
-void APIIndexer::index(llvm::RecordKeeper &Records) {
+void APIIndexer::index(const llvm::RecordKeeper &Records) {
   NamedTypeClass = Records.getClass(NamedTypeClassName);
   PtrTypeClass = Records.getClass(PtrTypeClassName);
   RestrictedPtrTypeClass = Records.getClass(RestrictedPtrTypeClassName);
@@ -159,7 +159,7 @@ void APIIndexer::index(llvm::RecordKeeper &Records) {
 
   const auto &DefsMap = Records.getDefs();
   for (auto &Pair : DefsMap) {
-    llvm::Record *Def = Pair.second.get();
+    const llvm::Record *Def = Pair.second.get();
     if (isaStandardSpec(Def))
       indexStandardSpecDef(Def);
     if (isaPublicAPI(Def)) {
diff --git a/libc/utils/LibcTableGenUtil/APIIndexer.h b/libc/utils/LibcTableGenUtil/APIIndexer.h
index d530dc7174555c..b8bca15ba131c1 100644
--- a/libc/utils/LibcTableGenUtil/APIIndexer.h
+++ b/libc/utils/LibcTableGenUtil/APIIndexer.h
@@ -24,36 +24,38 @@ class APIIndexer {
   std::optional<llvm::StringRef> StdHeader;
 
   // TableGen classes in spec.td.
-  llvm::Record *NamedTypeClass;
-  llvm::Record *PtrTypeClass;
-  llvm::Record *RestrictedPtrTypeClass;
-  llvm::Record *ConstTypeClass;
-  llvm::Record *StructClass;
-  llvm::Record *StandardSpecClass;
-  llvm::Record *PublicAPIClass;
-
-  bool isaNamedType(llvm::Record *Def);
-  bool isaStructType(llvm::Record *Def);
-  bool isaPtrType(llvm::Record *Def);
-  bool isaConstType(llvm::Record *Def);
-  bool isaRestrictedPtrType(llvm::Record *Def);
-  bool isaStandardSpec(llvm::Record *Def);
-  bool isaPublicAPI(llvm::Record *Def);
-
-  void indexStandardSpecDef(llvm::Record *StandardSpec);
-  void indexPublicAPIDef(llvm::Record *PublicAPI);
-  void index(llvm::RecordKeeper &Records);
+  const llvm::Record *NamedTypeClass;
+  const llvm::Record *PtrTypeClass;
+  const llvm::Record *RestrictedPtrTypeClass;
+  const llvm::Record *ConstTypeClass;
+  const llvm::Record *StructClass;
+  const llvm::Record *StandardSpecClass;
+  const llvm::Record *PublicAPIClass;
+
+  bool isaNamedType(const llvm::Record *Def);
+  bool isaStructType(const llvm::Record *Def);
+  bool isaPtrType(const llvm::Record *Def);
+  bool isaConstType(const llvm::Record *Def);
+  bool isaRestrictedPtrType(const llvm::Record *Def);
+  bool isaStandardSpec(const llvm::Record *Def);
+  bool isaPublicAPI(const llvm::Record *Def);
+
+  void indexStandardSpecDef(const llvm::Record *StandardSpec);
+  void indexPublicAPIDef(const llvm::Record *PublicAPI);
+  void index(const llvm::RecordKeeper &Records);
 
 public:
-  using NameToRecordMapping = std::unordered_map<std::string, llvm::Record *>;
+  using NameToRecordMapping =
+      std::unordered_map<std::string, const llvm::Record *>;
   using NameSet = std::unordered_set<std::string>;
 
   // This indexes all headers, not just a specified one.
-  explicit APIIndexer(llvm::RecordKeeper &Records) : StdHeader(std::nullopt) {
+  explicit APIIndexer(const llvm::RecordKeeper &Records)
+      : StdHeader(std::nullopt) {
     index(Records);
   }
 
-  APIIndexer(llvm::StringRef Header, llvm::RecordKeeper &Records)
+  APIIndexer(llvm::StringRef Header, const llvm::RecordKeeper &Records)
       : StdHeader(Header) {
     index(Records);
   }
@@ -76,7 +78,7 @@ class APIIndexer {
   NameSet Objects;
   NameSet PublicHeaders;
 
-  std::string getTypeAsString(llvm::Record *TypeRecord);
+  std::string getTypeAsString(const llvm::Record *TypeRecord);
 };
 
 } // namespace llvm_libc
diff --git a/llvm/include/llvm/TableGen/Record.h b/llvm/include/llvm/TableGen/Record.h
index 5d36fcf57e23e3..3b36173f6f1d19 100644
--- a/llvm/include/llvm/TableGen/Record.h
+++ b/llvm/include/llvm/TableGen/Record.h
@@ -1737,7 +1737,7 @@ class Record {
   void updateClassLoc(SMLoc Loc);
 
   // Make the type that this record should have based on its superclasses.
-  RecordRecTy *getType();
+  RecordRecTy *getType() const;
 
   /// get the corresponding DefInit.
   DefInit *getDefInit();
diff --git a/llvm/lib/TableGen/Record.cpp b/llvm/lib/TableGen/Record.cpp
index 17afa2f7eb1b99..692667f9753283 100644
--- a/llvm/lib/TableGen/Record.cpp
+++ b/llvm/lib/TableGen/Record.cpp
@@ -2802,7 +2802,7 @@ void Record::checkName() {
                                   "' is not a string!");
 }
 
-RecordRecTy *Record::getType() {
+RecordRecTy *Record::getType() const {
   SmallVector<Record *, 4> DirectSCs;
   getDirectSuperClasses(DirectSCs);
   return RecordRecTy::get(TrackedRecords, DirectSCs);



More information about the llvm-commits mailing list