13#ifndef LLVM_ANALYSIS_MEMORYPROFILEINFO_H
14#define LLVM_ANALYSIS_MEMORYPROFILEINFO_H
54 struct CallStackTrieNode {
60 std::map<uint64_t, CallStackTrieNode *> Callers;
62 : AllocTypes(
static_cast<uint8_t
>(
Type)), TotalSize(TotalSize) {}
66 CallStackTrieNode *Alloc =
nullptr;
70 void deleteTrieNode(CallStackTrieNode *
Node) {
73 for (
auto C :
Node->Callers)
74 deleteTrieNode(
C.second);
80 std::vector<uint64_t> &MIBCallStack,
81 std::vector<Metadata *> &MIBNodes,
82 bool CalleeHasAmbiguousCallerContext);
88 bool empty()
const {
return Alloc ==
nullptr; }
117template <
class NodeT,
class IteratorT>
class CallStack {
126 const NodeT *
N =
nullptr;
135 bool empty()
const {
return N ==
nullptr; }
137 CallStackIterator
begin()
const;
143 const NodeT *N =
nullptr;
146template <
class NodeT,
class IteratorT>
148 const NodeT *
N,
bool End)
154 Iter =
End ?
N->StackIdIndices.end() :
N->StackIdIndices.begin();
157template <
class NodeT,
class IteratorT>
159 assert(Iter != N->StackIdIndices.end());
163template <
class NodeT,
class IteratorT>
166 return N->StackIdIndices.back();
169template <
class NodeT,
class IteratorT>
175template <
class NodeT,
class IteratorT>
180 Cur !=
end() && OtherCur !=
Other.end(); ++Cur, ++OtherCur)
181 assert(*Cur == *OtherCur);
ModuleSummaryIndex.h This file contains the declarations the classes that hold the module index and s...
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
This is an important class for using LLVM in a threaded context.
The instances of the Type class are immutable: once they are created, they are never changed.
Class to build a trie of call stack contexts for a particular profiled allocation call,...
void addCallStack(AllocationType AllocType, ArrayRef< uint64_t > StackIds, uint64_t TotalSize=0)
Add a call stack context with the given allocation type to the Trie.
bool buildAndAttachMIBMetadata(CallBase *CI)
Build and attach the minimal necessary MIB metadata.
Helper class to iterate through stack ids in both metadata (memprof MIB and callsite) and the corresp...
CallStack(const NodeT *N=nullptr)
CallStackIterator begin() const
CallStackIterator end() const
CallStackIterator beginAfterSharedPrefix(CallStack &Other)
@ C
The default llvm calling convention, compatible with C.
MDNode * buildCallstackMetadata(ArrayRef< uint64_t > CallStack, LLVMContext &Ctx)
Build callstack metadata from the provided list of call stack ids.
AllocationType getAllocType(uint64_t TotalLifetimeAccessDensity, uint64_t AllocCount, uint64_t TotalLifetime)
Return the allocation type for a given set of memory profile values.
AllocationType getMIBAllocType(const MDNode *MIB)
Returns the allocation type from an MIB metadata node.
uint64_t getMIBTotalSize(const MDNode *MIB)
Returns the total size from an MIB metadata node, or 0 if it was not recorded.
bool hasSingleAllocType(uint8_t AllocTypes)
True if the AllocTypes bitmask contains just a single type.
std::string getAllocTypeAttributeString(AllocationType Type)
Returns the string to use in attributes with the given type.
MDNode * getMIBStackNode(const MDNode *MIB)
Returns the stack node from an MIB metadata node.
This is an optimization pass for GlobalISel generic memory operations.
bool operator!=(const CallStackIterator &rhs)
bool operator==(const CallStackIterator &rhs)
CallStackIterator(const NodeT *N, bool End)