[llvm] ec353b7 - [memprof] Use llvm::function_ref instead of std::function (#116306)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 15 13:03:28 PST 2024
Author: Kazu Hirata
Date: 2024-11-15T13:03:24-08:00
New Revision: ec353b7418e272e96cd63cc61bec586ab49da92f
URL: https://github.com/llvm/llvm-project/commit/ec353b7418e272e96cd63cc61bec586ab49da92f
DIFF: https://github.com/llvm/llvm-project/commit/ec353b7418e272e96cd63cc61bec586ab49da92f.diff
LOG: [memprof] Use llvm::function_ref instead of std::function (#116306)
We've seen bugs where we lost track of error states stored in the
functor because we passed the functor by value (that is,
std::function) as opposed to reference (llvm::function_ref).
This patch fixes a couple of places we pass functors by value.
While we are at it, this patch adds curly braces around a "for" loop
spanning multiple lines.
Added:
Modified:
llvm/include/llvm/ProfileData/MemProf.h
llvm/lib/ProfileData/InstrProfReader.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/ProfileData/MemProf.h b/llvm/include/llvm/ProfileData/MemProf.h
index bfd91407769bb3..ae262060718a7c 100644
--- a/llvm/include/llvm/ProfileData/MemProf.h
+++ b/llvm/include/llvm/ProfileData/MemProf.h
@@ -895,11 +895,12 @@ struct LinearFrameIdConverter {
// call stack array in the profile.
struct LinearCallStackIdConverter {
const unsigned char *CallStackBase;
- std::function<Frame(LinearFrameId)> FrameIdToFrame;
+ llvm::function_ref<Frame(LinearFrameId)> FrameIdToFrame;
LinearCallStackIdConverter() = delete;
- LinearCallStackIdConverter(const unsigned char *CallStackBase,
- std::function<Frame(LinearFrameId)> FrameIdToFrame)
+ LinearCallStackIdConverter(
+ const unsigned char *CallStackBase,
+ llvm::function_ref<Frame(LinearFrameId)> FrameIdToFrame)
: CallStackBase(CallStackBase), FrameIdToFrame(FrameIdToFrame) {}
std::vector<Frame> operator()(LinearCallStackId LinearCSId) {
@@ -966,13 +967,14 @@ struct CallerCalleePairExtractor {
// The base address of the radix tree array.
const unsigned char *CallStackBase;
// A functor to convert a linear FrameId to a Frame.
- std::function<Frame(LinearFrameId)> FrameIdToFrame;
+ llvm::function_ref<Frame(LinearFrameId)> FrameIdToFrame;
// A map from caller GUIDs to lists of call sites in respective callers.
DenseMap<uint64_t, SmallVector<CallEdgeTy, 0>> CallerCalleePairs;
CallerCalleePairExtractor() = delete;
- CallerCalleePairExtractor(const unsigned char *CallStackBase,
- std::function<Frame(LinearFrameId)> FrameIdToFrame)
+ CallerCalleePairExtractor(
+ const unsigned char *CallStackBase,
+ llvm::function_ref<Frame(LinearFrameId)> FrameIdToFrame)
: CallStackBase(CallStackBase), FrameIdToFrame(FrameIdToFrame) {}
void operator()(LinearCallStackId LinearCSId) {
diff --git a/llvm/lib/ProfileData/InstrProfReader.cpp b/llvm/lib/ProfileData/InstrProfReader.cpp
index 54a7dea59b1aea..5a2a3352c4b07d 100644
--- a/llvm/lib/ProfileData/InstrProfReader.cpp
+++ b/llvm/lib/ProfileData/InstrProfReader.cpp
@@ -1688,10 +1688,11 @@ IndexedMemProfReader::getMemProfCallerCalleePairs() const {
// duplicates, we first collect them in the form of a bit vector before
// processing them.
for (const memprof::IndexedMemProfRecord &IndexedRecord :
- MemProfRecordTable->data())
+ MemProfRecordTable->data()) {
for (const memprof::IndexedAllocationInfo &IndexedAI :
IndexedRecord.AllocSites)
Worklist.set(IndexedAI.CSId);
+ }
// Collect caller-callee pairs for each linear call stack ID in Worklist.
for (unsigned CS : Worklist.set_bits())
More information about the llvm-commits
mailing list