From b78bfe7169f325d016b817111b3b8a66113ff77d Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Thu, 3 Oct 2024 08:18:04 -0700 Subject: [PATCH] [TableGen] Delete non-const overloads of `getAllDerivedDefinitions` (#110990) Now that all TableGen backends have transitioned to const versions of these functions, we do not need the non-const versions anymore. This is a part of effort to have better const correctness in TableGen backends: https://discourse.llvm.org/t/psa-planned-changes-to-tablegen-getallderiveddefinitions-api-potential-downstream-breakages/81089 --- llvm/include/llvm/TableGen/Record.h | 26 +----------- llvm/lib/TableGen/Record.cpp | 63 ++++++----------------------- 2 files changed, 13 insertions(+), 76 deletions(-) diff --git a/llvm/include/llvm/TableGen/Record.h b/llvm/include/llvm/TableGen/Record.h index ed9855e0180ebdc..a8f1f0fe89b07e0 100644 --- a/llvm/include/llvm/TableGen/Record.h +++ b/llvm/include/llvm/TableGen/Record.h @@ -2060,28 +2060,19 @@ class RecordKeeper { //===--------------------------------------------------------------------===// // High-level helper methods, useful for tablegen backends. - // Non-const methods return std::vector by value or reference. - // Const methods return std::vector by value or - // ArrayRef. - /// Get all the concrete records that inherit from the one specified /// class. The class must be defined. ArrayRef getAllDerivedDefinitions(StringRef ClassName) const; - const std::vector &getAllDerivedDefinitions(StringRef ClassName); /// Get all the concrete records that inherit from all the specified /// classes. The classes must be defined. std::vector getAllDerivedDefinitions(ArrayRef ClassNames) const; - std::vector - getAllDerivedDefinitions(ArrayRef ClassNames); /// Get all the concrete records that inherit from specified class, if the /// class is defined. Returns an empty vector if the class is not defined. ArrayRef getAllDerivedDefinitionsIfDefined(StringRef ClassName) const; - const std::vector & - getAllDerivedDefinitionsIfDefined(StringRef ClassName); void dump() const; @@ -2093,24 +2084,9 @@ class RecordKeeper { RecordKeeper &operator=(RecordKeeper &&) = delete; RecordKeeper &operator=(const RecordKeeper &) = delete; - // Helper template functions for backend accessors. - template - const VecTy & - getAllDerivedDefinitionsImpl(StringRef ClassName, - std::map &Cache) const; - - template - VecTy getAllDerivedDefinitionsImpl(ArrayRef ClassNames) const; - - template - const VecTy &getAllDerivedDefinitionsIfDefinedImpl( - StringRef ClassName, std::map &Cache) const; - std::string InputFilename; RecordMap Classes, Defs; - mutable std::map> - ClassRecordsMapConst; - mutable std::map> ClassRecordsMap; + mutable std::map> Cache; GlobalMap ExtraGlobals; // TODO: Move timing related code out of RecordKeeper. diff --git a/llvm/lib/TableGen/Record.cpp b/llvm/lib/TableGen/Record.cpp index cf8b3165a4e0ff4..6a7c7b544814fa6 100644 --- a/llvm/lib/TableGen/Record.cpp +++ b/llvm/lib/TableGen/Record.cpp @@ -3275,24 +3275,20 @@ void RecordKeeper::stopBackendTimer() { } } -template -const VecTy &RecordKeeper::getAllDerivedDefinitionsImpl( - StringRef ClassName, std::map &Cache) const { +ArrayRef +RecordKeeper::getAllDerivedDefinitions(StringRef ClassName) const { // We cache the record vectors for single classes. Many backends request // the same vectors multiple times. - auto Pair = Cache.try_emplace(ClassName.str()); - if (Pair.second) - Pair.first->second = - getAllDerivedDefinitionsImpl(ArrayRef(ClassName)); - - return Pair.first->second; + auto [Iter, Inserted] = Cache.try_emplace(ClassName.str()); + if (Inserted) + Iter->second = getAllDerivedDefinitions(ArrayRef(ClassName)); + return Iter->second; } -template -VecTy RecordKeeper::getAllDerivedDefinitionsImpl( - ArrayRef ClassNames) const { +std::vector +RecordKeeper::getAllDerivedDefinitions(ArrayRef ClassNames) const { SmallVector ClassRecs; - VecTy Defs; + std::vector Defs; assert(ClassNames.size() > 0 && "At least one class must be passed."); for (const auto &ClassName : ClassNames) { @@ -3312,46 +3308,11 @@ VecTy RecordKeeper::getAllDerivedDefinitionsImpl( return Defs; } -template -const VecTy &RecordKeeper::getAllDerivedDefinitionsIfDefinedImpl( - StringRef ClassName, std::map &Cache) const { - return getClass(ClassName) - ? getAllDerivedDefinitionsImpl(ClassName, Cache) - : Cache[""]; -} - -ArrayRef -RecordKeeper::getAllDerivedDefinitions(StringRef ClassName) const { - return getAllDerivedDefinitionsImpl>( - ClassName, ClassRecordsMapConst); -} - -const std::vector & -RecordKeeper::getAllDerivedDefinitions(StringRef ClassName) { - return getAllDerivedDefinitionsImpl>(ClassName, - ClassRecordsMap); -} - -std::vector -RecordKeeper::getAllDerivedDefinitions(ArrayRef ClassNames) const { - return getAllDerivedDefinitionsImpl>(ClassNames); -} - -std::vector -RecordKeeper::getAllDerivedDefinitions(ArrayRef ClassNames) { - return getAllDerivedDefinitionsImpl>(ClassNames); -} - ArrayRef RecordKeeper::getAllDerivedDefinitionsIfDefined(StringRef ClassName) const { - return getAllDerivedDefinitionsIfDefinedImpl>( - ClassName, ClassRecordsMapConst); -} - -const std::vector & -RecordKeeper::getAllDerivedDefinitionsIfDefined(StringRef ClassName) { - return getAllDerivedDefinitionsIfDefinedImpl>( - ClassName, ClassRecordsMap); + if (getClass(ClassName)) + return getAllDerivedDefinitions(ClassName); + return Cache[""]; } void RecordKeeper::dumpAllocationStats(raw_ostream &OS) const {