Skip to content

Commit c5e4e8f

Browse files
[memprof] Add IndexedMemProfData::addCallStack (#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.
1 parent 131b7fe commit c5e4e8f

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

llvm/include/llvm/ProfileData/MemProf.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,6 +1029,18 @@ struct IndexedMemProfData {
10291029
Frames.try_emplace(Id, F);
10301030
return Id;
10311031
}
1032+
1033+
CallStackId addCallStack(ArrayRef<FrameId> CS) {
1034+
CallStackId CSId = hashCallStack(CS);
1035+
CallStacks.try_emplace(CSId, CS);
1036+
return CSId;
1037+
}
1038+
1039+
CallStackId addCallStack(SmallVector<FrameId> &&CS) {
1040+
CallStackId CSId = hashCallStack(CS);
1041+
CallStacks.try_emplace(CSId, std::move(CS));
1042+
return CSId;
1043+
}
10321044
};
10331045

10341046
struct FrameStat {

llvm/lib/ProfileData/MemProfReader.cpp

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -500,8 +500,7 @@ Error RawMemProfReader::mapRawProfileToRecords() {
500500
Callstack.append(Frames.begin(), Frames.end());
501501
}
502502

503-
CallStackId CSId = hashCallStack(Callstack);
504-
MemProfData.CallStacks.insert({CSId, Callstack});
503+
CallStackId CSId = MemProfData.addCallStack(Callstack);
505504

506505
// We attach the memprof record to each function bottom-up including the
507506
// first non-inline frame.
@@ -520,11 +519,8 @@ Error RawMemProfReader::mapRawProfileToRecords() {
520519
// Some functions may have only callsite data and no allocation data. Here
521520
// we insert a new entry for callsite data if we need to.
522521
IndexedMemProfRecord &Record = MemProfData.Records[Id];
523-
for (LocationPtr Loc : Locs) {
524-
CallStackId CSId = hashCallStack(*Loc);
525-
MemProfData.CallStacks.insert({CSId, *Loc});
526-
Record.CallSiteIds.push_back(CSId);
527-
}
522+
for (LocationPtr Loc : Locs)
523+
Record.CallSiteIds.push_back(MemProfData.addCallStack(*Loc));
528524
}
529525

530526
return Error::success();
@@ -769,9 +765,7 @@ void YAMLMemProfReader::parse(StringRef YAMLData) {
769765
IndexedCallStack.reserve(CallStack.size());
770766
for (const Frame &F : CallStack)
771767
IndexedCallStack.push_back(MemProfData.addFrame(F));
772-
CallStackId CSId = hashCallStack(IndexedCallStack);
773-
MemProfData.CallStacks.try_emplace(CSId, std::move(IndexedCallStack));
774-
return CSId;
768+
return MemProfData.addCallStack(std::move(IndexedCallStack));
775769
};
776770

777771
for (const auto &[GUID, Record] : Doc.HeapProfileRecords) {

llvm/unittests/ProfileData/MemProfTest.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -434,8 +434,7 @@ TEST(MemProf, BaseMemProfReader) {
434434
MemProfData.addFrame(F2);
435435

436436
llvm::SmallVector<FrameId> CallStack{F1.hash(), F2.hash()};
437-
CallStackId CSId = hashCallStack(CallStack);
438-
MemProfData.CallStacks.try_emplace(CSId, CallStack);
437+
CallStackId CSId = MemProfData.addCallStack(std::move(CallStack));
439438

440439
IndexedMemProfRecord FakeRecord;
441440
MemInfoBlock Block;
@@ -470,8 +469,7 @@ TEST(MemProf, BaseMemProfReaderWithCSIdMap) {
470469
MemProfData.addFrame(F2);
471470

472471
llvm::SmallVector<FrameId> CallStack = {F1.hash(), F2.hash()};
473-
CallStackId CSId = hashCallStack(CallStack);
474-
MemProfData.CallStacks.insert({CSId, CallStack});
472+
MemProfData.addCallStack(CallStack);
475473

476474
IndexedMemProfRecord FakeRecord;
477475
MemInfoBlock Block;

0 commit comments

Comments
 (0)