[PATCH] D108142: [SamplePGO] Fixing a memory issue when creating profiles on-demand
Hongtao Yu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 16 16:30:51 PDT 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa1e21864df68: [SamplePGO] Fixing a memory issue when creating profiles on-demand (authored by hoy).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D108142/new/
https://reviews.llvm.org/D108142
Files:
llvm/include/llvm/ProfileData/SampleProf.h
llvm/include/llvm/ProfileData/SampleProfReader.h
Index: llvm/include/llvm/ProfileData/SampleProfReader.h
===================================================================
--- llvm/include/llvm/ProfileData/SampleProfReader.h
+++ llvm/include/llvm/ProfileData/SampleProfReader.h
@@ -245,6 +245,7 @@
#include <memory>
#include <string>
#include <system_error>
+#include <unordered_set>
#include <vector>
namespace llvm {
@@ -407,6 +408,13 @@
std::string FGUID;
StringRef CanonName = FunctionSamples::getCanonicalFnName(F);
CanonName = getRepInFormat(CanonName, useMD5(), FGUID);
+ auto It = Profiles.find(CanonName);
+ if (It != Profiles.end())
+ return &It->second;
+ if (!FGUID.empty()) {
+ assert(useMD5() && "New name should only be generated for md5 profile");
+ CanonName = *MD5NameBuffer.insert(FGUID).first;
+ }
return &Profiles[CanonName];
}
@@ -503,6 +511,10 @@
/// Memory buffer holding the profile file.
std::unique_ptr<MemoryBuffer> Buffer;
+ /// Extra name buffer holding names created on demand.
+ /// This should only be needed for md5 profiles.
+ std::unordered_set<std::string> MD5NameBuffer;
+
/// Profile summary information.
std::unique_ptr<ProfileSummary> Summary;
Index: llvm/include/llvm/ProfileData/SampleProf.h
===================================================================
--- llvm/include/llvm/ProfileData/SampleProf.h
+++ llvm/include/llvm/ProfileData/SampleProf.h
@@ -104,10 +104,10 @@
/// current Format uses MD5 to represent the string.
static inline StringRef getRepInFormat(StringRef Name, bool UseMD5,
std::string &GUIDBuf) {
- if (Name.empty())
+ if (Name.empty() || !UseMD5)
return Name;
GUIDBuf = std::to_string(Function::getGUID(Name));
- return UseMD5 ? StringRef(GUIDBuf) : Name;
+ return GUIDBuf;
}
static inline uint64_t SPVersion() { return 103; }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108142.366763.patch
Type: text/x-patch
Size: 1883 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210816/734a83ae/attachment.bin>
More information about the llvm-commits
mailing list