diff --git a/llvm/include/llvm/Transforms/IPO/SampleContextTracker.h b/llvm/include/llvm/Transforms/IPO/SampleContextTracker.h --- a/llvm/include/llvm/Transforms/IPO/SampleContextTracker.h +++ b/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; + using ContextSamplesTy = SmallVector; SampleContextTracker(StringMap &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 FuncToCtxtProfileSet; + StringMap FuncToCtxtProfiles; // Root node for context trie tree ContextTrieNode RootContext; diff --git a/llvm/lib/Transforms/IPO/SampleContextTracker.cpp b/llvm/lib/Transforms/IPO/SampleContextTracker.cpp --- a/llvm/lib/Transforms/IPO/SampleContextTracker.cpp +++ b/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)