[PATCH] D110275: [llvm-profgen] Fix a dangling vector reference in CS line number based generator
Lei Wang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 22 18:34:23 PDT 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1ed69bb86eb1: [llvm-profgen] Fix a dangling vector reference in CS line number based generator (authored by wlei).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D110275/new/
https://reviews.llvm.org/D110275
Files:
llvm/tools/llvm-profgen/ProfileGenerator.cpp
llvm/tools/llvm-profgen/ProfileGenerator.h
Index: llvm/tools/llvm-profgen/ProfileGenerator.h
===================================================================
--- llvm/tools/llvm-profgen/ProfileGenerator.h
+++ llvm/tools/llvm-profgen/ProfileGenerator.h
@@ -190,8 +190,9 @@
protected:
// Lookup or create FunctionSamples for the context
- FunctionSamples &getFunctionProfileForContext(SampleContextFrames ContextId,
- bool WasLeafInlined = false);
+ FunctionSamples &
+ getFunctionProfileForContext(const SampleContextFrameVector &Context,
+ bool WasLeafInlined = false);
// Post processing for profiles before writing out, such as mermining
// and trimming cold profiles, running preinliner on profiles.
void postProcessProfiles();
@@ -203,6 +204,9 @@
uint64_t HotCountThreshold;
uint64_t ColdCountThreshold;
+ // Underlying context table serves for sample profile writer.
+ std::unordered_set<SampleContextFrameVector, SampleContextFrameHash> Contexts;
+
private:
// Helper function for updating body sample for a leaf location in
// FunctionProfile
@@ -249,9 +253,6 @@
FunctionSamples &
getFunctionProfileForLeafProbe(SampleContextFrames ContextStack,
const MCDecodedPseudoProbe *LeafProbe);
-
- // Underlying context table serves for sample profile writer.
- std::unordered_set<SampleContextFrameVector, SampleContextFrameHash> Contexts;
};
} // end namespace sampleprof
Index: llvm/tools/llvm-profgen/ProfileGenerator.cpp
===================================================================
--- llvm/tools/llvm-profgen/ProfileGenerator.cpp
+++ llvm/tools/llvm-profgen/ProfileGenerator.cpp
@@ -216,19 +216,21 @@
}
}
-FunctionSamples &
-CSProfileGenerator::getFunctionProfileForContext(SampleContextFrames Context,
- bool WasLeafInlined) {
- SampleContext FContext(Context);
- auto Ret = ProfileMap.emplace(Context, FunctionSamples());
- if (Ret.second) {
- SampleContext FContext(Context, RawContext);
+FunctionSamples &CSProfileGenerator::getFunctionProfileForContext(
+ const SampleContextFrameVector &Context, bool WasLeafInlined) {
+ auto I = ProfileMap.find(SampleContext(Context));
+ if (I == ProfileMap.end()) {
+ // Save the new context for future references.
+ SampleContextFrames NewContext = *Contexts.insert(Context).first;
+ SampleContext FContext(NewContext, RawContext);
+ auto Ret = ProfileMap.emplace(FContext, FunctionSamples());
if (WasLeafInlined)
FContext.setAttribute(ContextWasInlined);
FunctionSamples &FProfile = Ret.first->second;
FProfile.setContext(FContext);
+ return Ret.first->second;
}
- return Ret.first->second;
+ return I->second;
}
void CSProfileGenerator::generateProfile() {
@@ -543,11 +545,8 @@
uint64_t CallerIndex = CallerLeafFrameLoc.Callsite.LineOffset;
assert(CallerIndex &&
"Inferred caller's location index shouldn't be zero!");
- // Save the new context for future references.
- SampleContextFrames CallerContext =
- *Contexts.insert(CallerContextId).first;
FunctionSamples &CallerProfile =
- getFunctionProfileForContext(CallerContext);
+ getFunctionProfileForContext(CallerContextId);
CallerProfile.setFunctionHash(InlinerDesc->FuncHash);
CallerProfile.addBodySamples(CallerIndex, 0, Count);
CallerProfile.addTotalSamples(Count);
@@ -610,13 +609,11 @@
CSProfileGenerator::compressRecursionContext(NewContextStack);
CSProfileGenerator::trimContext(NewContextStack);
NewContextStack.push_back(LeafFrame);
- // Save the new context for future references.
- SampleContextFrames NewContext = *Contexts.insert(NewContextStack).first;
const auto *FuncDesc = Binary->getFuncDescForGUID(LeafProbe->getGuid());
bool WasLeafInlined = LeafProbe->getInlineTreeNode()->hasInlineSite();
FunctionSamples &FunctionProile =
- getFunctionProfileForContext(NewContext, WasLeafInlined);
+ getFunctionProfileForContext(NewContextStack, WasLeafInlined);
FunctionProile.setFunctionHash(FuncDesc->FuncHash);
return FunctionProile;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110275.374415.patch
Type: text/x-patch
Size: 4243 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210923/174b7fd9/attachment.bin>
More information about the llvm-commits
mailing list