[llvm] [memprof] Add IndexedMemProfData::addCallStack (PR #118920)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 5 20:36:13 PST 2024
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/118920
This patch adds a helper function to replace an idiom like:
CallStackId CSId = hashCallStack(CallStack)
MemProfData.CallStacks.try_emplace(CSId, CallStack);
// Do something with CSId.
>From 4f016b3d9f9262c6879f3a4c2ca7f42a98044a9b Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Wed, 4 Dec 2024 20:47:38 -0800
Subject: [PATCH] [memprof] Add IndexedMemProfData::addCallStack
This patch adds a helper function to replace an idiom like:
CallStackId CSId = hashCallStack(CallStack)
MemProfData.CallStacks.try_emplace(CSId, CallStack);
// Do something with CSId.
---
llvm/include/llvm/ProfileData/MemProf.h | 12 ++++++++++++
llvm/lib/ProfileData/MemProfReader.cpp | 14 ++++----------
llvm/unittests/ProfileData/MemProfTest.cpp | 6 ++----
3 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/llvm/include/llvm/ProfileData/MemProf.h b/llvm/include/llvm/ProfileData/MemProf.h
index 51f012cdaed3ac..8a85196e57044d 100644
--- a/llvm/include/llvm/ProfileData/MemProf.h
+++ b/llvm/include/llvm/ProfileData/MemProf.h
@@ -1029,6 +1029,18 @@ struct IndexedMemProfData {
Frames.try_emplace(Id, F);
return Id;
}
+
+ CallStackId addCallStack(ArrayRef<FrameId> CS) {
+ CallStackId CSId = hashCallStack(CS);
+ CallStacks.try_emplace(CSId, CS);
+ return CSId;
+ }
+
+ CallStackId addCallStack(SmallVector<FrameId> &&CS) {
+ CallStackId CSId = hashCallStack(CS);
+ CallStacks.try_emplace(CSId, std::move(CS));
+ return CSId;
+ }
};
struct FrameStat {
diff --git a/llvm/lib/ProfileData/MemProfReader.cpp b/llvm/lib/ProfileData/MemProfReader.cpp
index 9dacf298985937..2cf0e9c74c0d23 100644
--- a/llvm/lib/ProfileData/MemProfReader.cpp
+++ b/llvm/lib/ProfileData/MemProfReader.cpp
@@ -500,8 +500,7 @@ Error RawMemProfReader::mapRawProfileToRecords() {
Callstack.append(Frames.begin(), Frames.end());
}
- CallStackId CSId = hashCallStack(Callstack);
- MemProfData.CallStacks.insert({CSId, Callstack});
+ CallStackId CSId = MemProfData.addCallStack(Callstack);
// We attach the memprof record to each function bottom-up including the
// first non-inline frame.
@@ -520,11 +519,8 @@ Error RawMemProfReader::mapRawProfileToRecords() {
// Some functions may have only callsite data and no allocation data. Here
// we insert a new entry for callsite data if we need to.
IndexedMemProfRecord &Record = MemProfData.Records[Id];
- for (LocationPtr Loc : Locs) {
- CallStackId CSId = hashCallStack(*Loc);
- MemProfData.CallStacks.insert({CSId, *Loc});
- Record.CallSiteIds.push_back(CSId);
- }
+ for (LocationPtr Loc : Locs)
+ Record.CallSiteIds.push_back(MemProfData.addCallStack(*Loc));
}
return Error::success();
@@ -769,9 +765,7 @@ void YAMLMemProfReader::parse(StringRef YAMLData) {
IndexedCallStack.reserve(CallStack.size());
for (const Frame &F : CallStack)
IndexedCallStack.push_back(MemProfData.addFrame(F));
- CallStackId CSId = hashCallStack(IndexedCallStack);
- MemProfData.CallStacks.try_emplace(CSId, std::move(IndexedCallStack));
- return CSId;
+ return MemProfData.addCallStack(std::move(IndexedCallStack));
};
for (const auto &[GUID, Record] : Doc.HeapProfileRecords) {
diff --git a/llvm/unittests/ProfileData/MemProfTest.cpp b/llvm/unittests/ProfileData/MemProfTest.cpp
index f0567d0707fef0..74a6acf9e9a82f 100644
--- a/llvm/unittests/ProfileData/MemProfTest.cpp
+++ b/llvm/unittests/ProfileData/MemProfTest.cpp
@@ -434,8 +434,7 @@ TEST(MemProf, BaseMemProfReader) {
MemProfData.addFrame(F2);
llvm::SmallVector<FrameId> CallStack{F1.hash(), F2.hash()};
- CallStackId CSId = hashCallStack(CallStack);
- MemProfData.CallStacks.try_emplace(CSId, CallStack);
+ CallStackId CSId = MemProfData.addCallStack(std::move(CallStack));
IndexedMemProfRecord FakeRecord;
MemInfoBlock Block;
@@ -470,8 +469,7 @@ TEST(MemProf, BaseMemProfReaderWithCSIdMap) {
MemProfData.addFrame(F2);
llvm::SmallVector<FrameId> CallStack = {F1.hash(), F2.hash()};
- CallStackId CSId = hashCallStack(CallStack);
- MemProfData.CallStacks.insert({CSId, CallStack});
+ MemProfData.addCallStack(CallStack);
IndexedMemProfRecord FakeRecord;
MemInfoBlock Block;
More information about the llvm-commits
mailing list