[llvm] [MemProf] Prune unneeded non-cold contexts (PR #124823)
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 28 15:38:40 PST 2025
================
@@ -243,14 +256,35 @@ void CallStackTrie::convertHotToNotCold(CallStackTrieNode *Node) {
bool CallStackTrie::buildMIBNodes(CallStackTrieNode *Node, LLVMContext &Ctx,
std::vector<uint64_t> &MIBCallStack,
std::vector<Metadata *> &MIBNodes,
- bool CalleeHasAmbiguousCallerContext) {
+ bool CalleeHasAmbiguousCallerContext,
+ bool &CalleeDeepestAmbiguousAllocType) {
// Trim context below the first node in a prefix with a single alloc type.
// Add an MIB record for the current call stack prefix.
if (hasSingleAllocType(Node->AllocTypes)) {
- std::vector<ContextTotalSize> ContextSizeInfo;
- collectContextSizeInfo(Node, ContextSizeInfo);
- MIBNodes.push_back(createMIBNode(
- Ctx, MIBCallStack, (AllocationType)Node->AllocTypes, ContextSizeInfo));
+ // Because we only clone cold contexts (we don't clone for exposing NotCold
+ // contexts as that is the default allocation behavior), we create MIB
+ // metadata for this context if any of the following are true:
+ // 1) It is cold.
+ // 2) The immediate callee is the deepest point where we have an ambiguous
+ // allocation type (i.e. the other callers that are cold need to know
+ // that we have a not cold context overlapping to this point so that we
+ // know how deep to clone).
+ // 3) MemProfKeepAllNotColdContexts is enabled, which is useful if we are
+ // reporting hinted sizes, and want to get information from the indexing
+ // step for all contexts, or have specified a value less than 100% for
+ // -memprof-cloning-cold-threshold.
+ if ((AllocationType)Node->AllocTypes == AllocationType::Cold ||
----------------
teresajohnson wrote:
ack
https://github.com/llvm/llvm-project/pull/124823
More information about the llvm-commits
mailing list