Skip to content

Commit dfb864a

Browse files
[TableGen] Use heterogenous lookups with std::map (NFC) (#115810)
Heterogenous lookups allow us to call find with StringRef, avoiding a temporary heap allocation of std::string. This patch introduces alias: using DiagsInGroup = std::map<std::string, GroupInfo, std::less<>>; because the raw type is a bit mouthful.
1 parent 853d52b commit dfb864a

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

clang/utils/TableGen/ClangDiagnosticsEmitter.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,13 @@ static bool diagGroupBeforeByName(const Record *LHS, const Record *RHS) {
153153
RHS->getValueAsString("GroupName");
154154
}
155155

156+
using DiagsInGroupTy = std::map<std::string, GroupInfo, std::less<>>;
157+
156158
/// Invert the 1-[0/1] mapping of diags to group into a one to many
157159
/// mapping of groups to diags in the group.
158160
static void groupDiagnostics(ArrayRef<const Record *> Diags,
159161
ArrayRef<const Record *> DiagGroups,
160-
std::map<std::string, GroupInfo> &DiagsInGroup) {
162+
DiagsInGroupTy &DiagsInGroup) {
161163

162164
for (unsigned i = 0, e = Diags.size(); i != e; ++i) {
163165
const Record *R = Diags[i];
@@ -256,14 +258,14 @@ class InferPedantic {
256258
DiagGroupParentMap &DiagGroupParents;
257259
ArrayRef<const Record *> Diags;
258260
const std::vector<const Record *> DiagGroups;
259-
std::map<std::string, GroupInfo> &DiagsInGroup;
261+
DiagsInGroupTy &DiagsInGroup;
260262
DenseSet<const Record *> DiagsSet;
261263
GMap GroupCount;
262264
public:
263265
InferPedantic(DiagGroupParentMap &DiagGroupParents,
264266
ArrayRef<const Record *> Diags,
265267
ArrayRef<const Record *> DiagGroups,
266-
std::map<std::string, GroupInfo> &DiagsInGroup)
268+
DiagsInGroupTy &DiagsInGroup)
267269
: DiagGroupParents(DiagGroupParents), Diags(Diags),
268270
DiagGroups(DiagGroups), DiagsInGroup(DiagsInGroup) {}
269271

@@ -1426,7 +1428,7 @@ void clang::EmitClangDiagsDefs(const RecordKeeper &Records, raw_ostream &OS,
14261428
ArrayRef<const Record *> DiagGroups =
14271429
Records.getAllDerivedDefinitions("DiagGroup");
14281430

1429-
std::map<std::string, GroupInfo> DiagsInGroup;
1431+
DiagsInGroupTy DiagsInGroup;
14301432
groupDiagnostics(Diags, DiagGroups, DiagsInGroup);
14311433

14321434
DiagCategoryIDMap CategoryIDs(Records);
@@ -1549,7 +1551,7 @@ static std::string getDiagCategoryEnum(StringRef name) {
15491551
/// }
15501552
/// \endcode
15511553
///
1552-
static void emitDiagSubGroups(std::map<std::string, GroupInfo> &DiagsInGroup,
1554+
static void emitDiagSubGroups(DiagsInGroupTy &DiagsInGroup,
15531555
RecordVec &GroupsInPedantic, raw_ostream &OS) {
15541556
OS << "static const int16_t DiagSubGroups[] = {\n"
15551557
<< " /* Empty */ -1,\n";
@@ -1601,7 +1603,7 @@ static void emitDiagSubGroups(std::map<std::string, GroupInfo> &DiagsInGroup,
16011603
/// };
16021604
/// \endcode
16031605
///
1604-
static void emitDiagArrays(std::map<std::string, GroupInfo> &DiagsInGroup,
1606+
static void emitDiagArrays(DiagsInGroupTy &DiagsInGroup,
16051607
RecordVec &DiagsInPedantic, raw_ostream &OS) {
16061608
OS << "static const int16_t DiagArrays[] = {\n"
16071609
<< " /* Empty */ -1,\n";
@@ -1653,7 +1655,7 @@ static void emitDiagGroupNames(const StringToOffsetTable &GroupNames,
16531655
/// static const char DiagGroupNames[];
16541656
/// #endif
16551657
/// \endcode
1656-
static void emitAllDiagArrays(std::map<std::string, GroupInfo> &DiagsInGroup,
1658+
static void emitAllDiagArrays(DiagsInGroupTy &DiagsInGroup,
16571659
RecordVec &DiagsInPedantic,
16581660
RecordVec &GroupsInPedantic,
16591661
const StringToOffsetTable &GroupNames,
@@ -1680,7 +1682,7 @@ static void emitAllDiagArrays(std::map<std::string, GroupInfo> &DiagsInGroup,
16801682
/// {/* deprecated */ 1981,/* DiagArray1 */ 348, /* DiagSubGroup3 */ 9},
16811683
/// #endif
16821684
/// \endcode
1683-
static void emitDiagTable(std::map<std::string, GroupInfo> &DiagsInGroup,
1685+
static void emitDiagTable(DiagsInGroupTy &DiagsInGroup,
16841686
RecordVec &DiagsInPedantic,
16851687
RecordVec &GroupsInPedantic,
16861688
const StringToOffsetTable &GroupNames,
@@ -1782,7 +1784,7 @@ void clang::EmitClangDiagGroups(const RecordKeeper &Records, raw_ostream &OS) {
17821784
ArrayRef<const Record *> DiagGroups =
17831785
Records.getAllDerivedDefinitions("DiagGroup");
17841786

1785-
std::map<std::string, GroupInfo> DiagsInGroup;
1787+
DiagsInGroupTy DiagsInGroup;
17861788
groupDiagnostics(Diags, DiagGroups, DiagsInGroup);
17871789

17881790
// All extensions are implicitly in the "pedantic" group. Record the
@@ -1856,11 +1858,11 @@ namespace docs {
18561858
namespace {
18571859

18581860
bool isRemarkGroup(const Record *DiagGroup,
1859-
const std::map<std::string, GroupInfo> &DiagsInGroup) {
1861+
const DiagsInGroupTy &DiagsInGroup) {
18601862
bool AnyRemarks = false, AnyNonRemarks = false;
18611863

18621864
std::function<void(StringRef)> Visit = [&](StringRef GroupName) {
1863-
auto &GroupInfo = DiagsInGroup.find(std::string(GroupName))->second;
1865+
auto &GroupInfo = DiagsInGroup.find(GroupName)->second;
18641866
for (const Record *Diag : GroupInfo.DiagsInGroup)
18651867
(isRemark(*Diag) ? AnyRemarks : AnyNonRemarks) = true;
18661868
for (const auto &Name : GroupInfo.SubGroups)
@@ -1880,13 +1882,12 @@ std::string getDefaultSeverity(const Record *Diag) {
18801882
Diag->getValueAsDef("DefaultSeverity")->getValueAsString("Name"));
18811883
}
18821884

1883-
std::set<std::string>
1884-
getDefaultSeverities(const Record *DiagGroup,
1885-
const std::map<std::string, GroupInfo> &DiagsInGroup) {
1885+
std::set<std::string> getDefaultSeverities(const Record *DiagGroup,
1886+
const DiagsInGroupTy &DiagsInGroup) {
18861887
std::set<std::string> States;
18871888

18881889
std::function<void(StringRef)> Visit = [&](StringRef GroupName) {
1889-
auto &GroupInfo = DiagsInGroup.find(std::string(GroupName))->second;
1890+
auto &GroupInfo = DiagsInGroup.find(GroupName)->second;
18901891
for (const Record *Diag : GroupInfo.DiagsInGroup)
18911892
States.insert(getDefaultSeverity(Diag));
18921893
for (const auto &Name : GroupInfo.SubGroups)
@@ -1940,7 +1941,7 @@ void clang::EmitClangDiagDocs(const RecordKeeper &Records, raw_ostream &OS) {
19401941

19411942
DiagGroupParentMap DGParentMap(Records);
19421943

1943-
std::map<std::string, GroupInfo> DiagsInGroup;
1944+
DiagsInGroupTy DiagsInGroup;
19441945
groupDiagnostics(Diags, DiagGroups, DiagsInGroup);
19451946

19461947
// Compute the set of diagnostics that are in -Wpedantic.

0 commit comments

Comments
 (0)