[llvm] [BOLT] Avoid repeated hash lookups (NFC) (PR #140426)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Sat May 17 18:36:01 PDT 2025
https://github.com/kazutakahirata updated https://github.com/llvm/llvm-project/pull/140426
>From 1db1b377622ac516f8778c1b21eff0c3c6956b7f Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sat, 17 May 2025 17:37:10 -0700
Subject: [PATCH 1/2] [BOLT] Avoid repeated hash lookups (NFC)
We can use try_emplace to succinctly implement GetOrCreateFuncEntry
and GetOrCreateFuncMemEntry. Since it's a bit mouthful to say
FuncBasicSampleData::ContainerTy(), this patch changes the second
parameters to default ones.
---
bolt/include/bolt/Profile/DataReader.h | 4 ++--
bolt/lib/Profile/DataReader.cpp | 19 ++-----------------
2 files changed, 4 insertions(+), 19 deletions(-)
diff --git a/bolt/include/bolt/Profile/DataReader.h b/bolt/include/bolt/Profile/DataReader.h
index 80031f8f6ef4a..c91498214e62a 100644
--- a/bolt/include/bolt/Profile/DataReader.h
+++ b/bolt/include/bolt/Profile/DataReader.h
@@ -205,7 +205,7 @@ struct FuncMemData {
FuncMemData() {}
- FuncMemData(StringRef Name, ContainerTy Data)
+ FuncMemData(StringRef Name, ContainerTy Data = ContainerTy())
: Name(Name), Data(std::move(Data)) {}
};
@@ -241,7 +241,7 @@ struct FuncBasicSampleData {
StringRef Name;
ContainerTy Data;
- FuncBasicSampleData(StringRef Name, ContainerTy Data)
+ FuncBasicSampleData(StringRef Name, ContainerTy Data = ContainerTy())
: Name(Name), Data(std::move(Data)) {}
/// Get the number of samples recorded in [Start, End)
diff --git a/bolt/lib/Profile/DataReader.cpp b/bolt/lib/Profile/DataReader.cpp
index 198f7d8642738..079cdc1785eaf 100644
--- a/bolt/lib/Profile/DataReader.cpp
+++ b/bolt/lib/Profile/DataReader.cpp
@@ -1088,26 +1088,11 @@ bool DataReader::hasMemData() {
std::error_code DataReader::parseInNoLBRMode() {
auto GetOrCreateFuncEntry = [&](StringRef Name) {
- auto I = NamesToBasicSamples.find(Name);
- if (I == NamesToBasicSamples.end()) {
- bool Success;
- std::tie(I, Success) = NamesToBasicSamples.insert(std::make_pair(
- Name, FuncBasicSampleData(Name, FuncBasicSampleData::ContainerTy())));
-
- assert(Success && "unexpected result of insert");
- }
- return I;
+ return NamesToBasicSamples.try_emplace(Name, Name).first;
};
auto GetOrCreateFuncMemEntry = [&](StringRef Name) {
- auto I = NamesToMemEvents.find(Name);
- if (I == NamesToMemEvents.end()) {
- bool Success;
- std::tie(I, Success) = NamesToMemEvents.insert(
- std::make_pair(Name, FuncMemData(Name, FuncMemData::ContainerTy())));
- assert(Success && "unexpected result of insert");
- }
- return I;
+ return NamesToMemEvents.try_emplace(Name, Name).first;
};
while (hasBranchData()) {
>From 7ce1c4c519de981d02674b6319c80a8a7bdef190 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sat, 17 May 2025 18:34:25 -0700
Subject: [PATCH 2/2] Address a comment.
---
bolt/include/bolt/Profile/DataReader.h | 6 ++----
bolt/lib/Profile/DataReader.cpp | 19 ++-----------------
2 files changed, 4 insertions(+), 21 deletions(-)
diff --git a/bolt/include/bolt/Profile/DataReader.h b/bolt/include/bolt/Profile/DataReader.h
index c91498214e62a..5df1b5a8f4a00 100644
--- a/bolt/include/bolt/Profile/DataReader.h
+++ b/bolt/include/bolt/Profile/DataReader.h
@@ -114,10 +114,8 @@ struct FuncBranchData {
FuncBranchData() {}
- FuncBranchData(StringRef Name, ContainerTy Data)
- : Name(Name), Data(std::move(Data)) {}
-
- FuncBranchData(StringRef Name, ContainerTy Data, ContainerTy EntryData)
+ FuncBranchData(StringRef Name, ContainerTy Data = ContainerTy(),
+ ContainerTy EntryData = ContainerTy())
: Name(Name), Data(std::move(Data)), EntryData(std::move(EntryData)) {}
ErrorOr<const BranchInfo &> getBranch(uint64_t From, uint64_t To) const;
diff --git a/bolt/lib/Profile/DataReader.cpp b/bolt/lib/Profile/DataReader.cpp
index 079cdc1785eaf..c512394f26a3b 100644
--- a/bolt/lib/Profile/DataReader.cpp
+++ b/bolt/lib/Profile/DataReader.cpp
@@ -1136,26 +1136,11 @@ std::error_code DataReader::parseInNoLBRMode() {
std::error_code DataReader::parse() {
auto GetOrCreateFuncEntry = [&](StringRef Name) {
- auto I = NamesToBranches.find(Name);
- if (I == NamesToBranches.end()) {
- bool Success;
- std::tie(I, Success) = NamesToBranches.insert(std::make_pair(
- Name, FuncBranchData(Name, FuncBranchData::ContainerTy(),
- FuncBranchData::ContainerTy())));
- assert(Success && "unexpected result of insert");
- }
- return I;
+ return NamesToBranches.try_emplace(Name, Name).first;
};
auto GetOrCreateFuncMemEntry = [&](StringRef Name) {
- auto I = NamesToMemEvents.find(Name);
- if (I == NamesToMemEvents.end()) {
- bool Success;
- std::tie(I, Success) = NamesToMemEvents.insert(
- std::make_pair(Name, FuncMemData(Name, FuncMemData::ContainerTy())));
- assert(Success && "unexpected result of insert");
- }
- return I;
+ return NamesToMemEvents.try_emplace(Name, Name).first;
};
Col = 0;
More information about the llvm-commits
mailing list