Skip to content

Commit d4562a1

Browse files
[MemProf] Use DenseMap for call map (NFC) (#151161)
There is no reason to use std::map for the call maps maintained for function clones during function clone assignment, as we don't iterate over them and don't need deterministic ordering, so use the more efficient DenseMap.
1 parent 30ad2e2 commit d4562a1

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ class CallsiteContextGraph {
732732
/// of the functions tracked calls to their new versions in the CallMap.
733733
/// Assigns new clones to clone number CloneNo.
734734
FuncInfo cloneFunctionForCallsite(
735-
FuncInfo &Func, CallInfo &Call, std::map<CallInfo, CallInfo> &CallMap,
735+
FuncInfo &Func, CallInfo &Call, DenseMap<CallInfo, CallInfo> &CallMap,
736736
std::vector<CallInfo> &CallsWithMetadataInFunc, unsigned CloneNo) {
737737
return static_cast<DerivedCCG *>(this)->cloneFunctionForCallsite(
738738
Func, Call, CallMap, CallsWithMetadataInFunc, CloneNo);
@@ -899,7 +899,7 @@ class ModuleCallsiteContextGraph
899899
CallsiteContextGraph<ModuleCallsiteContextGraph, Function,
900900
Instruction *>::FuncInfo
901901
cloneFunctionForCallsite(FuncInfo &Func, CallInfo &Call,
902-
std::map<CallInfo, CallInfo> &CallMap,
902+
DenseMap<CallInfo, CallInfo> &CallMap,
903903
std::vector<CallInfo> &CallsWithMetadataInFunc,
904904
unsigned CloneNo);
905905
std::string getLabel(const Function *Func, const Instruction *Call,
@@ -991,7 +991,7 @@ class IndexCallsiteContextGraph
991991
CallsiteContextGraph<IndexCallsiteContextGraph, FunctionSummary,
992992
IndexCall>::FuncInfo
993993
cloneFunctionForCallsite(FuncInfo &Func, CallInfo &Call,
994-
std::map<CallInfo, CallInfo> &CallMap,
994+
DenseMap<CallInfo, CallInfo> &CallMap,
995995
std::vector<CallInfo> &CallsWithMetadataInFunc,
996996
unsigned CloneNo);
997997
std::string getLabel(const FunctionSummary *Func, const IndexCall &Call,
@@ -4062,7 +4062,7 @@ static void updateSubprogramLinkageName(Function *NewFunc, StringRef Name) {
40624062
CallsiteContextGraph<ModuleCallsiteContextGraph, Function,
40634063
Instruction *>::FuncInfo
40644064
ModuleCallsiteContextGraph::cloneFunctionForCallsite(
4065-
FuncInfo &Func, CallInfo &Call, std::map<CallInfo, CallInfo> &CallMap,
4065+
FuncInfo &Func, CallInfo &Call, DenseMap<CallInfo, CallInfo> &CallMap,
40664066
std::vector<CallInfo> &CallsWithMetadataInFunc, unsigned CloneNo) {
40674067
// Use existing LLVM facilities for cloning and obtaining Call in clone
40684068
ValueToValueMapTy VMap;
@@ -4085,7 +4085,7 @@ ModuleCallsiteContextGraph::cloneFunctionForCallsite(
40854085
CallsiteContextGraph<IndexCallsiteContextGraph, FunctionSummary,
40864086
IndexCall>::FuncInfo
40874087
IndexCallsiteContextGraph::cloneFunctionForCallsite(
4088-
FuncInfo &Func, CallInfo &Call, std::map<CallInfo, CallInfo> &CallMap,
4088+
FuncInfo &Func, CallInfo &Call, DenseMap<CallInfo, CallInfo> &CallMap,
40894089
std::vector<CallInfo> &CallsWithMetadataInFunc, unsigned CloneNo) {
40904090
// Check how many clones we have of Call (and therefore function).
40914091
// The next clone number is the current size of versions array.
@@ -4506,7 +4506,7 @@ bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::assignFunctions() {
45064506
FuncInfo FuncClone;
45074507
// Remappings of each call of interest (from original uncloned call to the
45084508
// corresponding cloned call in this function clone).
4509-
std::map<CallInfo, CallInfo> CallMap;
4509+
DenseMap<CallInfo, CallInfo> CallMap;
45104510
};
45114511

45124512
// Walk all functions for which we saw calls with memprof metadata, and handle
@@ -4542,7 +4542,7 @@ bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::assignFunctions() {
45424542
FuncCloneToCurNodeCloneMap[FuncClone] = CallsiteClone;
45434543

45444544
assert(FuncCloneInfos.size() > FuncClone.cloneNo());
4545-
std::map<CallInfo, CallInfo> &CallMap =
4545+
DenseMap<CallInfo, CallInfo> &CallMap =
45464546
FuncCloneInfos[FuncClone.cloneNo()].CallMap;
45474547
CallInfo CallClone(Call);
45484548
if (auto It = CallMap.find(Call); It != CallMap.end())
@@ -4594,7 +4594,8 @@ bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::assignFunctions() {
45944594
}));
45954595
// Initialize with empty call map, assign Clone to original function
45964596
// and its callers, and skip to the next clone.
4597-
FuncCloneInfos.push_back({OrigFunc, {}});
4597+
FuncCloneInfos.push_back(
4598+
{OrigFunc, DenseMap<CallInfo, CallInfo>()});
45984599
AssignCallsiteCloneToFuncClone(
45994600
OrigFunc, Call, Clone,
46004601
AllocationCallToContextNodeMap.count(Call));
@@ -4627,7 +4628,7 @@ bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::assignFunctions() {
46274628

46284629
// Clone function and save it along with the CallInfo map created
46294630
// during cloning in the FuncCloneInfos.
4630-
std::map<CallInfo, CallInfo> NewCallMap;
4631+
DenseMap<CallInfo, CallInfo> NewCallMap;
46314632
unsigned CloneNo = FuncCloneInfos.size();
46324633
assert(CloneNo > 0 && "Clone 0 is the original function, which "
46334634
"should already exist in the map");
@@ -4734,7 +4735,7 @@ bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::assignFunctions() {
47344735
// CallMap is set up as indexed by original Call at clone 0.
47354736
CallInfo OrigCall(Callee->getOrigNode()->Call);
47364737
OrigCall.setCloneNo(0);
4737-
std::map<CallInfo, CallInfo> &CallMap =
4738+
DenseMap<CallInfo, CallInfo> &CallMap =
47384739
FuncCloneInfos[NewFuncClone.cloneNo()].CallMap;
47394740
assert(CallMap.count(OrigCall));
47404741
CallInfo NewCall(CallMap[OrigCall]);

0 commit comments

Comments
 (0)