Skip to content

Commit b78bfe7

Browse files
authored
[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
1 parent 01a1398 commit b78bfe7

File tree

2 files changed

+13
-76
lines changed

2 files changed

+13
-76
lines changed

llvm/include/llvm/TableGen/Record.h

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2060,28 +2060,19 @@ class RecordKeeper {
20602060
//===--------------------------------------------------------------------===//
20612061
// High-level helper methods, useful for tablegen backends.
20622062

2063-
// Non-const methods return std::vector<Record *> by value or reference.
2064-
// Const methods return std::vector<const Record *> by value or
2065-
// ArrayRef<const Record *>.
2066-
20672063
/// Get all the concrete records that inherit from the one specified
20682064
/// class. The class must be defined.
20692065
ArrayRef<const Record *> getAllDerivedDefinitions(StringRef ClassName) const;
2070-
const std::vector<Record *> &getAllDerivedDefinitions(StringRef ClassName);
20712066

20722067
/// Get all the concrete records that inherit from all the specified
20732068
/// classes. The classes must be defined.
20742069
std::vector<const Record *>
20752070
getAllDerivedDefinitions(ArrayRef<StringRef> ClassNames) const;
2076-
std::vector<Record *>
2077-
getAllDerivedDefinitions(ArrayRef<StringRef> ClassNames);
20782071

20792072
/// Get all the concrete records that inherit from specified class, if the
20802073
/// class is defined. Returns an empty vector if the class is not defined.
20812074
ArrayRef<const Record *>
20822075
getAllDerivedDefinitionsIfDefined(StringRef ClassName) const;
2083-
const std::vector<Record *> &
2084-
getAllDerivedDefinitionsIfDefined(StringRef ClassName);
20852076

20862077
void dump() const;
20872078

@@ -2093,24 +2084,9 @@ class RecordKeeper {
20932084
RecordKeeper &operator=(RecordKeeper &&) = delete;
20942085
RecordKeeper &operator=(const RecordKeeper &) = delete;
20952086

2096-
// Helper template functions for backend accessors.
2097-
template <typename VecTy>
2098-
const VecTy &
2099-
getAllDerivedDefinitionsImpl(StringRef ClassName,
2100-
std::map<std::string, VecTy> &Cache) const;
2101-
2102-
template <typename VecTy>
2103-
VecTy getAllDerivedDefinitionsImpl(ArrayRef<StringRef> ClassNames) const;
2104-
2105-
template <typename VecTy>
2106-
const VecTy &getAllDerivedDefinitionsIfDefinedImpl(
2107-
StringRef ClassName, std::map<std::string, VecTy> &Cache) const;
2108-
21092087
std::string InputFilename;
21102088
RecordMap Classes, Defs;
2111-
mutable std::map<std::string, std::vector<const Record *>>
2112-
ClassRecordsMapConst;
2113-
mutable std::map<std::string, std::vector<Record *>> ClassRecordsMap;
2089+
mutable std::map<std::string, std::vector<const Record *>> Cache;
21142090
GlobalMap ExtraGlobals;
21152091

21162092
// TODO: Move timing related code out of RecordKeeper.

llvm/lib/TableGen/Record.cpp

Lines changed: 12 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3275,24 +3275,20 @@ void RecordKeeper::stopBackendTimer() {
32753275
}
32763276
}
32773277

3278-
template <typename VecTy>
3279-
const VecTy &RecordKeeper::getAllDerivedDefinitionsImpl(
3280-
StringRef ClassName, std::map<std::string, VecTy> &Cache) const {
3278+
ArrayRef<const Record *>
3279+
RecordKeeper::getAllDerivedDefinitions(StringRef ClassName) const {
32813280
// We cache the record vectors for single classes. Many backends request
32823281
// the same vectors multiple times.
3283-
auto Pair = Cache.try_emplace(ClassName.str());
3284-
if (Pair.second)
3285-
Pair.first->second =
3286-
getAllDerivedDefinitionsImpl<VecTy>(ArrayRef(ClassName));
3287-
3288-
return Pair.first->second;
3282+
auto [Iter, Inserted] = Cache.try_emplace(ClassName.str());
3283+
if (Inserted)
3284+
Iter->second = getAllDerivedDefinitions(ArrayRef(ClassName));
3285+
return Iter->second;
32893286
}
32903287

3291-
template <typename VecTy>
3292-
VecTy RecordKeeper::getAllDerivedDefinitionsImpl(
3293-
ArrayRef<StringRef> ClassNames) const {
3288+
std::vector<const Record *>
3289+
RecordKeeper::getAllDerivedDefinitions(ArrayRef<StringRef> ClassNames) const {
32943290
SmallVector<const Record *, 2> ClassRecs;
3295-
VecTy Defs;
3291+
std::vector<const Record *> Defs;
32963292

32973293
assert(ClassNames.size() > 0 && "At least one class must be passed.");
32983294
for (const auto &ClassName : ClassNames) {
@@ -3312,46 +3308,11 @@ VecTy RecordKeeper::getAllDerivedDefinitionsImpl(
33123308
return Defs;
33133309
}
33143310

3315-
template <typename VecTy>
3316-
const VecTy &RecordKeeper::getAllDerivedDefinitionsIfDefinedImpl(
3317-
StringRef ClassName, std::map<std::string, VecTy> &Cache) const {
3318-
return getClass(ClassName)
3319-
? getAllDerivedDefinitionsImpl<VecTy>(ClassName, Cache)
3320-
: Cache[""];
3321-
}
3322-
3323-
ArrayRef<const Record *>
3324-
RecordKeeper::getAllDerivedDefinitions(StringRef ClassName) const {
3325-
return getAllDerivedDefinitionsImpl<std::vector<const Record *>>(
3326-
ClassName, ClassRecordsMapConst);
3327-
}
3328-
3329-
const std::vector<Record *> &
3330-
RecordKeeper::getAllDerivedDefinitions(StringRef ClassName) {
3331-
return getAllDerivedDefinitionsImpl<std::vector<Record *>>(ClassName,
3332-
ClassRecordsMap);
3333-
}
3334-
3335-
std::vector<const Record *>
3336-
RecordKeeper::getAllDerivedDefinitions(ArrayRef<StringRef> ClassNames) const {
3337-
return getAllDerivedDefinitionsImpl<std::vector<const Record *>>(ClassNames);
3338-
}
3339-
3340-
std::vector<Record *>
3341-
RecordKeeper::getAllDerivedDefinitions(ArrayRef<StringRef> ClassNames) {
3342-
return getAllDerivedDefinitionsImpl<std::vector<Record *>>(ClassNames);
3343-
}
3344-
33453311
ArrayRef<const Record *>
33463312
RecordKeeper::getAllDerivedDefinitionsIfDefined(StringRef ClassName) const {
3347-
return getAllDerivedDefinitionsIfDefinedImpl<std::vector<const Record *>>(
3348-
ClassName, ClassRecordsMapConst);
3349-
}
3350-
3351-
const std::vector<Record *> &
3352-
RecordKeeper::getAllDerivedDefinitionsIfDefined(StringRef ClassName) {
3353-
return getAllDerivedDefinitionsIfDefinedImpl<std::vector<Record *>>(
3354-
ClassName, ClassRecordsMap);
3313+
if (getClass(ClassName))
3314+
return getAllDerivedDefinitions(ClassName);
3315+
return Cache[""];
33553316
}
33563317

33573318
void RecordKeeper::dumpAllocationStats(raw_ostream &OS) const {

0 commit comments

Comments
 (0)