[llvm] [NFC][TableGen] Remove small heap allocations in SearchableTableEmitter (PR #147845)
Rahul Joshi via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 10 06:43:04 PDT 2025
================
@@ -625,30 +638,29 @@ std::unique_ptr<SearchIndex> SearchableTableEmitter::parseSearchIndex(
void SearchableTableEmitter::collectEnumEntries(
GenericEnum &Enum, StringRef NameField, StringRef ValueField,
ArrayRef<const Record *> Items) {
+ Enum.Entries.reserve(Items.size());
for (const Record *EntryRec : Items) {
- StringRef Name;
- if (NameField.empty())
- Name = EntryRec->getName();
- else
- Name = EntryRec->getValueAsString(NameField);
-
- int64_t Value = 0;
- if (!ValueField.empty())
- Value = getInt(EntryRec, ValueField);
-
- Enum.Entries.push_back(std::make_unique<GenericEnum::Entry>(Name, Value));
- Enum.EntryMap.try_emplace(EntryRec, Enum.Entries.back().get());
+ StringRef Name = NameField.empty() ? EntryRec->getName()
+ : EntryRec->getValueAsString(NameField);
+ int64_t Value = ValueField.empty() ? 0 : getInt(EntryRec, ValueField);
+ Enum.Entries.try_emplace(EntryRec, Name, Value);
}
+ // If no values are provided for enums, assign values in the order of sorted
+ // enum names.
if (ValueField.empty()) {
- llvm::stable_sort(Enum.Entries,
- [](const std::unique_ptr<GenericEnum::Entry> &LHS,
- const std::unique_ptr<GenericEnum::Entry> &RHS) {
- return LHS->first < RHS->first;
- });
-
- for (size_t i = 0; i < Enum.Entries.size(); ++i)
- Enum.Entries[i]->second = i;
+ // Copy the map entries for sorting and clear the map.
+ auto SavedEntries = Enum.Entries.takeVector();
+ llvm::stable_sort(
+ SavedEntries,
+ [](const std::pair<const Record *, GenericEnum::Entry> &LHS,
+ const std::pair<const Record *, GenericEnum::Entry> &RHS) {
----------------
jurahul wrote:
Done.
https://github.com/llvm/llvm-project/pull/147845
More information about the llvm-commits
mailing list