LLVM 20.0.0git
Classes | Public Member Functions | List of all members
llvm::memprof::CallStackTrie Class Reference

Class to build a trie of call stack contexts for a particular profiled allocation call, along with their associated allocation types. More...

#include "llvm/Analysis/MemoryProfileInfo.h"

Public Member Functions

 CallStackTrie ()=default
 
 ~CallStackTrie ()
 
bool empty () const
 
void addCallStack (AllocationType AllocType, ArrayRef< uint64_t > StackIds, std::vector< ContextTotalSize > ContextSizeInfo={})
 Add a call stack context with the given allocation type to the Trie.
 
void addCallStack (MDNode *MIB)
 Add the call stack context along with its allocation type from the MIB metadata to the Trie.
 
bool buildAndAttachMIBMetadata (CallBase *CI)
 Build and attach the minimal necessary MIB metadata.
 
void addSingleAllocTypeAttribute (CallBase *CI, AllocationType AT, StringRef Descriptor)
 Add an attribute for the given allocation type to the call instruction.
 

Detailed Description

Class to build a trie of call stack contexts for a particular profiled allocation call, along with their associated allocation types.

The allocation will be at the root of the trie, which is then used to compute the minimum lists of context ids needed to associate a call context with a single allocation type.

Definition at line 53 of file MemoryProfileInfo.h.

Constructor & Destructor Documentation

◆ CallStackTrie()

llvm::memprof::CallStackTrie::CallStackTrie ( )
default

◆ ~CallStackTrie()

llvm::memprof::CallStackTrie::~CallStackTrie ( )
inline

Definition at line 96 of file MemoryProfileInfo.h.

Member Function Documentation

◆ addCallStack() [1/2]

void CallStackTrie::addCallStack ( AllocationType  AllocType,
ArrayRef< uint64_t StackIds,
std::vector< ContextTotalSize ContextSizeInfo = {} 
)

Add a call stack context with the given allocation type to the Trie.

The context is represented by the list of stack ids (computed during matching via a debug location hash), expected to be in order from the allocation call down to the bottom of the call stack (i.e. callee to caller order).

Definition at line 133 of file MemoryProfileInfo.cpp.

References assert(), and llvm::First.

Referenced by addCallStack(), and addCallStack().

◆ addCallStack() [2/2]

void CallStackTrie::addCallStack ( MDNode MIB)

Add the call stack context along with its allocation type from the MIB metadata to the Trie.

Definition at line 169 of file MemoryProfileInfo.cpp.

References addCallStack(), assert(), llvm::memprof::getMIBAllocType(), llvm::memprof::getMIBStackNode(), llvm::MDNode::getNumOperands(), llvm::MDNode::getOperand(), I, and llvm::MDNode::operands().

◆ addSingleAllocTypeAttribute()

void CallStackTrie::addSingleAllocTypeAttribute ( CallBase CI,
AllocationType  AT,
StringRef  Descriptor 
)

Add an attribute for the given allocation type to the call instruction.

If hinted by reporting is enabled, a message is emitted with the given descriptor used to identify the category of single allocation type.

Definition at line 281 of file MemoryProfileInfo.cpp.

References addAllocTypeAttribute(), llvm::errs(), llvm::memprof::getAllocTypeAttributeString(), llvm::Value::getContext(), and MemProfReportHintedSizes.

Referenced by buildAndAttachMIBMetadata(), and readMemprof().

◆ buildAndAttachMIBMetadata()

bool CallStackTrie::buildAndAttachMIBMetadata ( CallBase CI)

Build and attach the minimal necessary MIB metadata.

If the alloc has a single allocation type, add a function attribute instead. The reason for adding an attribute in this case is that it matches how the behavior for allocation calls will be communicated to lib call simplification after cloning or another optimization to distinguish the allocation types, which is lower overhead and more direct than maintaining this metadata. Returns true if memprof metadata attached, false if not (attribute added).

Definition at line 298 of file MemoryProfileInfo.cpp.

References addSingleAllocTypeAttribute(), assert(), llvm::MDNode::get(), llvm::Value::getContext(), llvm::memprof::hasSingleAllocType(), llvm::NotCold, and llvm::Instruction::setMetadata().

Referenced by readMemprof().

◆ empty()

bool llvm::memprof::CallStackTrie::empty ( ) const
inline

Definition at line 98 of file MemoryProfileInfo.h.

Referenced by readMemprof().


The documentation for this class was generated from the following files: