[PATCH] D99547: [IPO][SampleContextTracker] Use SmallVector to track context profiles to prevent non-determinism.
Huihui Zhang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 29 16:37:27 PDT 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rGca721042f1c9: [IPO][SampleContextTracker] Use SmallVector to track context profiles to… (authored by huihuiz).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D99547/new/
https://reviews.llvm.org/D99547
Files:
llvm/include/llvm/Transforms/IPO/SampleContextTracker.h
llvm/lib/Transforms/IPO/SampleContextTracker.cpp
Index: llvm/lib/Transforms/IPO/SampleContextTracker.cpp
===================================================================
--- llvm/lib/Transforms/IPO/SampleContextTracker.cpp
+++ llvm/lib/Transforms/IPO/SampleContextTracker.cpp
@@ -183,7 +183,7 @@
SampleContext Context(FuncSample.first(), RawContext);
LLVM_DEBUG(dbgs() << "Tracking Context for function: " << Context << "\n");
if (!Context.isBaseContext())
- FuncToCtxtProfileSet[Context.getNameWithoutContext()].insert(FSamples);
+ FuncToCtxtProfiles[Context.getNameWithoutContext()].push_back(FSamples);
ContextTrieNode *NewNode = getOrCreateContextPath(Context, true);
assert(!NewNode->getFunctionSamples() &&
"New node can't have sample profile");
@@ -268,12 +268,12 @@
SampleContextTracker::ContextSamplesTy &
SampleContextTracker::getAllContextSamplesFor(const Function &Func) {
StringRef CanonName = FunctionSamples::getCanonicalFnName(Func);
- return FuncToCtxtProfileSet[CanonName];
+ return FuncToCtxtProfiles[CanonName];
}
SampleContextTracker::ContextSamplesTy &
SampleContextTracker::getAllContextSamplesFor(StringRef Name) {
- return FuncToCtxtProfileSet[Name];
+ return FuncToCtxtProfiles[Name];
}
FunctionSamples *SampleContextTracker::getBaseSamplesFor(const Function &Func,
@@ -297,7 +297,7 @@
// We have profile for function under different contexts,
// create synthetic base profile and merge context profiles
// into base profile.
- for (auto *CSamples : FuncToCtxtProfileSet[Name]) {
+ for (auto *CSamples : FuncToCtxtProfiles[Name]) {
SampleContext &Context = CSamples->getContext();
ContextTrieNode *FromNode = getContextFor(Context);
if (FromNode == Node)
Index: llvm/include/llvm/Transforms/IPO/SampleContextTracker.h
===================================================================
--- llvm/include/llvm/Transforms/IPO/SampleContextTracker.h
+++ llvm/include/llvm/Transforms/IPO/SampleContextTracker.h
@@ -15,7 +15,7 @@
#ifndef LLVM_TRANSFORMS_IPO_SAMPLECONTEXTTRACKER_H
#define LLVM_TRANSFORMS_IPO_SAMPLECONTEXTTRACKER_H
-#include "llvm/ADT/SmallSet.h"
+#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/CallGraph.h"
@@ -91,7 +91,7 @@
// calling context and the context is identified by path from root to the node.
class SampleContextTracker {
public:
- using ContextSamplesTy = SmallSet<FunctionSamples *, 16>;
+ using ContextSamplesTy = SmallVector<FunctionSamples *, 16>;
SampleContextTracker(StringMap<FunctionSamples> &Profiles);
// Query context profile for a specific callee with given name at a given
@@ -144,7 +144,7 @@
StringRef ContextStrToRemove);
// Map from function name to context profiles (excluding base profile)
- StringMap<ContextSamplesTy> FuncToCtxtProfileSet;
+ StringMap<ContextSamplesTy> FuncToCtxtProfiles;
// Root node for context trie tree
ContextTrieNode RootContext;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D99547.334013.patch
Type: text/x-patch
Size: 3047 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210329/af7dd8b6/attachment.bin>
More information about the llvm-commits
mailing list