[llvm] [MemProf] Refactor context node creation into a new helper (NFC) (PR #108408)
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 12 08:31:13 PDT 2024
https://github.com/teresajohnson created https://github.com/llvm/llvm-project/pull/108408
Simplify code by refactoring some common handling for node creation into
a helper function.
>From 8482578b20cfd8db499654b2a61698b13831845a Mon Sep 17 00:00:00 2001
From: Teresa Johnson <tejohnson at google.com>
Date: Thu, 12 Sep 2024 08:26:46 -0700
Subject: [PATCH] [MemProf] Refactor context node creation into a new helper
(NFC)
Simplify code by refactoring some common handling for node creation into
a helper function.
---
.../IPO/MemProfContextDisambiguation.cpp | 37 +++++++++----------
1 file changed, 17 insertions(+), 20 deletions(-)
diff --git a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
index fa25baee2ba032..42c9faf0445563 100644
--- a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
+++ b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
@@ -587,6 +587,16 @@ class CallsiteContextGraph {
return static_cast<const DerivedCCG *>(this)->getLabel(Func, Call, CloneNo);
}
+ // Create and return a new ContextNode.
+ ContextNode *createNewNode(bool IsAllocation, const FuncTy *F = nullptr,
+ CallInfo C = CallInfo()) {
+ NodeOwner.push_back(std::make_unique<ContextNode>(IsAllocation, C));
+ auto *NewNode = NodeOwner.back().get();
+ if (F)
+ NodeToCallingFunc[NewNode] = F;
+ return NewNode;
+ }
+
/// Helpers to find the node corresponding to the given call or stackid.
ContextNode *getNodeForInst(const CallInfo &C);
ContextNode *getNodeForAlloc(const CallInfo &C);
@@ -1023,11 +1033,8 @@ typename CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::ContextNode *
CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::addAllocNode(
CallInfo Call, const FuncTy *F) {
assert(!getNodeForAlloc(Call));
- NodeOwner.push_back(
- std::make_unique<ContextNode>(/*IsAllocation=*/true, Call));
- ContextNode *AllocNode = NodeOwner.back().get();
+ ContextNode *AllocNode = createNewNode(/*IsAllocation=*/true, F, Call);
AllocationCallToContextNodeMap[Call] = AllocNode;
- NodeToCallingFunc[AllocNode] = F;
// Use LastContextId as a uniq id for MIB allocation nodes.
AllocNode->OrigStackOrAllocId = LastContextId;
// Alloc type should be updated as we add in the MIBs. We should assert
@@ -1084,9 +1091,7 @@ void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::addStackNodesForMIB(
auto StackId = getStackId(*ContextIter);
ContextNode *StackNode = getNodeForStackId(StackId);
if (!StackNode) {
- NodeOwner.push_back(
- std::make_unique<ContextNode>(/*IsAllocation=*/false));
- StackNode = NodeOwner.back().get();
+ StackNode = createNewNode(/*IsAllocation=*/false);
StackEntryIdToContextNodeMap[StackId] = StackNode;
StackNode->OrigStackOrAllocId = StackId;
}
@@ -1371,10 +1376,7 @@ void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::
continue;
// Create new context node.
- NodeOwner.push_back(
- std::make_unique<ContextNode>(/*IsAllocation=*/false, Call));
- ContextNode *NewNode = NodeOwner.back().get();
- NodeToCallingFunc[NewNode] = Func;
+ ContextNode *NewNode = createNewNode(/*IsAllocation=*/false, Func, Call);
NonAllocationCallToContextNodeMap[Call] = NewNode;
NewNode->AllocTypes = computeAllocType(SavedContextIds);
@@ -2083,10 +2085,7 @@ bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::calleesMatch(
} else {
FuncToCallsWithMetadata[Func].push_back({NewCall});
// Create Node and record node info.
- NodeOwner.push_back(
- std::make_unique<ContextNode>(/*IsAllocation=*/false, NewCall));
- NewNode = NodeOwner.back().get();
- NodeToCallingFunc[NewNode] = Func;
+ NewNode = createNewNode(/*IsAllocation=*/false, Func, NewCall);
TailCallToContextNodeMap[NewCall] = NewNode;
NewNode->AllocTypes = Edge->AllocTypes;
}
@@ -2655,13 +2654,11 @@ CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::moveEdgeToNewCalleeClone(
const std::shared_ptr<ContextEdge> &Edge, EdgeIter *CallerEdgeI,
DenseSet<uint32_t> ContextIdsToMove) {
ContextNode *Node = Edge->Callee;
- NodeOwner.push_back(
- std::make_unique<ContextNode>(Node->IsAllocation, Node->Call));
- ContextNode *Clone = NodeOwner.back().get();
+ assert(NodeToCallingFunc.count(Node));
+ ContextNode *Clone =
+ createNewNode(Node->IsAllocation, NodeToCallingFunc[Node], Node->Call);
Node->addClone(Clone);
Clone->MatchingCalls = Node->MatchingCalls;
- assert(NodeToCallingFunc.count(Node));
- NodeToCallingFunc[Clone] = NodeToCallingFunc[Node];
moveEdgeToExistingCalleeClone(Edge, Clone, CallerEdgeI, /*NewClone=*/true,
ContextIdsToMove);
return Clone;
More information about the llvm-commits
mailing list