[PATCH] D157061: [SampleProfile] Potential use after move in SampleProfileLoader::promoteMergeNotInlinedContextSamples
William Junda Huang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 15 17:01:14 PDT 2023
huangjd updated this revision to Diff 550554.
huangjd added a comment.
Herald added a subscriber: hoy.
Update to make SampleProfileMatcher own the outline profiles
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D157061/new/
https://reviews.llvm.org/D157061
Files:
llvm/include/llvm/Transforms/Utils/SampleProfileLoaderBaseImpl.h
llvm/lib/Transforms/IPO/SampleProfile.cpp
Index: llvm/lib/Transforms/IPO/SampleProfile.cpp
===================================================================
--- llvm/lib/Transforms/IPO/SampleProfile.cpp
+++ llvm/lib/Transforms/IPO/SampleProfile.cpp
@@ -1619,7 +1619,12 @@
// Note that we have to do the merge right after processing function.
// This allows OutlineFS's profile to be used for annotation during
// top-down processing of functions' annotation.
- FunctionSamples *OutlineFS = Reader->getOrCreateSamplesFor(*Callee);
+ FunctionSamples *OutlineFS = Reader->getSamplesFor(*Callee);
+ // If outlined function does not exist in the profile, add it to a
+ // separate map so that it does not rehash the original profile.
+ if (!OutlineFS)
+ OutlineFS = &OutlineFunctionSamples[
+ FunctionSamples::getCanonicalFnName(Callee->getName())];
OutlineFS->merge(*FS, 1);
// Set outlined profile to be synthetic to not bias the inliner.
OutlineFS->SetContextSynthetic();
@@ -2571,8 +2576,24 @@
if (FunctionSamples::ProfileIsCS)
Samples = ContextTracker->getBaseSamplesFor(F);
- else
+ else {
Samples = Reader->getSamplesFor(F);
+ // Try search in previously inlined functions that were split or duplicated
+ // into base.
+ if (!Samples) {
+ StringRef CanonName = FunctionSamples::getCanonicalFnName(F);
+ auto It = OutlineFunctionSamples.find(CanonName);
+ if (It != OutlineFunctionSamples.end()) {
+ Samples = &It->second;
+ } else if (auto Remapper = Reader->getRemapper()) {
+ if (auto RemppedName = Remapper->lookUpNameInProfile(CanonName)) {
+ It = OutlineFunctionSamples.find(*RemppedName);
+ if (It != OutlineFunctionSamples.end())
+ Samples = &It->second;
+ }
+ }
+ }
+ }
if (Samples && !Samples->empty())
return emitAnnotations(F);
Index: llvm/include/llvm/Transforms/Utils/SampleProfileLoaderBaseImpl.h
===================================================================
--- llvm/include/llvm/Transforms/Utils/SampleProfileLoaderBaseImpl.h
+++ llvm/include/llvm/Transforms/Utils/SampleProfileLoaderBaseImpl.h
@@ -265,6 +265,10 @@
/// Profile reader object.
std::unique_ptr<SampleProfileReader> Reader;
+ /// Synthetic samples created by duplicating the samples of inlined functions
+ /// from the original profile as if they were top level sample profiles.
+ SampleProfileMap OutlineFunctionSamples;
+
// A pseudo probe helper to correlate the imported sample counts.
std::unique_ptr<PseudoProbeManager> ProbeManager;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D157061.550554.patch
Type: text/x-patch
Size: 2633 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230816/514b28d3/attachment.bin>
More information about the llvm-commits
mailing list