[llvm] [memprof] Add IndexedMemProfData::addFrame (PR #118724)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 4 17:08:58 PST 2024
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/118724
This patch adds a helper function to replace an idiom like:
FrameId Id = F.hash();
MemProfData.Frames.try_emplace(Id, F);
// Do something with Id.
>From 9a6294b273fd7f0891fc8f04b2af26badb405319 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Wed, 4 Dec 2024 09:58:18 -0800
Subject: [PATCH] [memprof] Add IndexedMemProfData::addFrame
This patch adds a helper function to replace an idiom like:
FrameId Id = F.hash();
MemProfData.Frames.try_emplace(Id, F);
// Do something with Id.
---
llvm/include/llvm/ProfileData/MemProf.h | 6 ++++++
llvm/lib/ProfileData/MemProfReader.cpp | 11 +++--------
llvm/unittests/ProfileData/MemProfTest.cpp | 8 ++++----
3 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/llvm/include/llvm/ProfileData/MemProf.h b/llvm/include/llvm/ProfileData/MemProf.h
index fe017913f6de24..9aaa2af335a239 100644
--- a/llvm/include/llvm/ProfileData/MemProf.h
+++ b/llvm/include/llvm/ProfileData/MemProf.h
@@ -1023,6 +1023,12 @@ struct IndexedMemProfData {
// A map to hold call stack id to call stacks.
llvm::MapVector<CallStackId, llvm::SmallVector<FrameId>> CallStacks;
+
+ FrameId addFrame(const Frame &F) {
+ const FrameId Id = F.hash();
+ Frames.try_emplace(Id, F);
+ return Id;
+ }
};
struct FrameStat {
diff --git a/llvm/lib/ProfileData/MemProfReader.cpp b/llvm/lib/ProfileData/MemProfReader.cpp
index fdb8e596b0dd3e..9dacf298985937 100644
--- a/llvm/lib/ProfileData/MemProfReader.cpp
+++ b/llvm/lib/ProfileData/MemProfReader.cpp
@@ -584,9 +584,7 @@ Error RawMemProfReader::symbolizeAndFilterStackFrames(
GuidToSymbolName.insert({Guid, CanonicalName.str()});
}
- const FrameId Hash = F.hash();
- MemProfData.Frames.insert({Hash, F});
- SymbolizedFrame[VAddr].push_back(Hash);
+ SymbolizedFrame[VAddr].push_back(MemProfData.addFrame(F));
}
}
@@ -769,11 +767,8 @@ void YAMLMemProfReader::parse(StringRef YAMLData) {
auto AddCallStack = [&](ArrayRef<Frame> CallStack) -> CallStackId {
SmallVector<FrameId> IndexedCallStack;
IndexedCallStack.reserve(CallStack.size());
- for (const Frame &F : CallStack) {
- FrameId Id = F.hash();
- MemProfData.Frames.try_emplace(Id, F);
- IndexedCallStack.push_back(Id);
- }
+ 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;
diff --git a/llvm/unittests/ProfileData/MemProfTest.cpp b/llvm/unittests/ProfileData/MemProfTest.cpp
index 2f8589bbfbb962..3ac64dcac0abed 100644
--- a/llvm/unittests/ProfileData/MemProfTest.cpp
+++ b/llvm/unittests/ProfileData/MemProfTest.cpp
@@ -430,8 +430,8 @@ TEST(MemProf, BaseMemProfReader) {
/*Column=*/5, /*IsInlineFrame=*/true);
Frame F2(/*Hash=*/IndexedMemProfRecord::getGUID("bar"), /*LineOffset=*/10,
/*Column=*/2, /*IsInlineFrame=*/false);
- MemProfData.Frames.insert({F1.hash(), F1});
- MemProfData.Frames.insert({F2.hash(), F2});
+ MemProfData.addFrame(F1);
+ MemProfData.addFrame(F2);
llvm::SmallVector<FrameId> CallStack{F1.hash(), F2.hash()};
CallStackId CSId = hashCallStack(CallStack);
@@ -466,8 +466,8 @@ TEST(MemProf, BaseMemProfReaderWithCSIdMap) {
/*Column=*/5, /*IsInlineFrame=*/true);
Frame F2(/*Hash=*/IndexedMemProfRecord::getGUID("bar"), /*LineOffset=*/10,
/*Column=*/2, /*IsInlineFrame=*/false);
- MemProfData.Frames.insert({F1.hash(), F1});
- MemProfData.Frames.insert({F2.hash(), F2});
+ MemProfData.addFrame(F1);
+ MemProfData.addFrame(F2);
llvm::SmallVector<FrameId> CallStack = {F1.hash(), F2.hash()};
CallStackId CSId = hashCallStack(CallStack);
More information about the llvm-commits
mailing list