52 Result +=
N.serializedSize(Schema,
Version0);
56 for (
const auto &Frames :
Record.CallSites) {
59 Result += Frames.size() *
sizeof(
FrameId);
69 Result +=
N.serializedSize(Schema,
Version2);
92 using namespace support;
99 for (
const FrameId &Id :
N.CallStack)
101 N.Info.serialize(Schema,
OS);
106 for (
const auto &Frames :
Record.CallSites) {
108 for (
const FrameId &Id : Frames)
115 using namespace support;
122 N.Info.serialize(Schema,
OS);
127 for (
const auto &CSId :
Record.CallSiteIds)
146 const unsigned char *
Ptr) {
147 using namespace support;
153 endian::readNext<uint64_t, llvm::endianness::little>(
Ptr);
157 endian::readNext<uint64_t, llvm::endianness::little>(
Ptr);
158 for (
uint64_t J = 0; J < NumFrames; J++) {
160 endian::readNext<FrameId, llvm::endianness::little>(
Ptr);
161 Node.CallStack.push_back(Id);
164 Node.Info.deserialize(Schema,
Ptr);
171 endian::readNext<uint64_t, llvm::endianness::little>(
Ptr);
172 for (
uint64_t J = 0; J < NumCtxs; J++) {
174 endian::readNext<uint64_t, llvm::endianness::little>(
Ptr);
177 for (
uint64_t K = 0; K < NumFrames; K++) {
179 endian::readNext<FrameId, llvm::endianness::little>(
Ptr);
182 Record.CallSites.push_back(Frames);
190 const unsigned char *
Ptr) {
191 using namespace support;
197 endian::readNext<uint64_t, llvm::endianness::little>(
Ptr);
200 Node.CSId = endian::readNext<CallStackId, llvm::endianness::little>(
Ptr);
201 Node.Info.deserialize(Schema,
Ptr);
208 endian::readNext<uint64_t, llvm::endianness::little>(
Ptr);
209 for (
uint64_t J = 0; J < NumCtxs; J++) {
211 endian::readNext<CallStackId, llvm::endianness::little>(
Ptr);
212 Record.CallSiteIds.push_back(CSId);
220 const unsigned char *
Ptr,
239 AI.
Info = IndexedAI.Info;
241 Record.AllocSites.push_back(AI);
245 Record.CallSites.push_back(Callback(CSId));
267 using namespace support;
269 const unsigned char *
Ptr = Buffer;
271 endian::readNext<uint64_t, llvm::endianness::little>(
Ptr);
274 "memprof schema invalid");
278 for (
size_t I = 0;
I < NumSchemaIds;
I++) {
280 endian::readNext<uint64_t, llvm::endianness::little>(
Ptr);
283 "memprof schema invalid");
285 Result.push_back(
static_cast<Meta>(
Tag));
299 std::memcpy(&CSId, Hash.data(),
sizeof(Hash));
304 for (
const auto &AS :
Record.AllocSites) {
312 &FunctionProfileData) {
313 for (
const auto &[GUID,
Record] : FunctionProfileData) {
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This file defines the SmallVector class.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Tagged union holding either a T or a Error.
GUID getGUID() const
Return a 64-bit global unique ID constructed from global value name (i.e.
HashResultTy< HasherT_ > final()
Forward to HasherT::final() if available.
Interface to help hash various types through a hasher type.
std::enable_if_t< hashbuilder_detail::IsHashableData< T >::value, HashBuilder & > add(T Value)
Implement hashing for hashable data types, e.g. integral or enum values.
This class implements a map that also provides access to all stored values in a deterministic order.
void reserve(size_type N)
void push_back(const T &Elt)
StringRef - Represent a constant reference to a string, i.e.
This class implements an extremely fast bulk output stream that can only output to a stream.
static StringRef getCanonicalFnName(const Function &F)
Return the canonical name for a function, taking into account suffix elision policy attributes.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
void verifyIndexedMemProfRecord(const IndexedMemProfRecord &Record)
CallStackId hashCallStack(ArrayRef< FrameId > CS)
static size_t serializedSizeV2(const IndexedAllocationInfo &IAI, const MemProfSchema &Schema)
static size_t serializedSizeV0(const IndexedAllocationInfo &IAI, const MemProfSchema &Schema)
static void serializeV0(const IndexedMemProfRecord &Record, const MemProfSchema &Schema, raw_ostream &OS)
static IndexedMemProfRecord deserializeV0(const MemProfSchema &Schema, const unsigned char *Ptr)
Expected< MemProfSchema > readMemProfSchema(const unsigned char *&Buffer)
void verifyFunctionProfileData(const llvm::MapVector< GlobalValue::GUID, IndexedMemProfRecord > &FunctionProfileData)
static void serializeV2(const IndexedMemProfRecord &Record, const MemProfSchema &Schema, raw_ostream &OS)
static IndexedMemProfRecord deserializeV2(const MemProfSchema &Schema, const unsigned char *Ptr)
This is an optimization pass for GlobalISel generic memory operations.
std::array< uint8_t, NumBytes > BLAKE3Result
The constant LLVM_BLAKE3_OUT_LEN provides the default output length, 32 bytes, which is recommended f...
PortableMemInfoBlock Info
llvm::SmallVector< Frame > CallStack
size_t serializedSize(const MemProfSchema &Schema, IndexedVersion Version) const
llvm::SmallVector< FrameId > CallStack
llvm::SmallVector< CallStackId > CallSiteIds
llvm::SmallVector< IndexedAllocationInfo > AllocSites
size_t serializedSize(const MemProfSchema &Schema, IndexedVersion Version) const
static IndexedMemProfRecord deserialize(const MemProfSchema &Schema, const unsigned char *Buffer, IndexedVersion Version)
MemProfRecord toMemProfRecord(std::function< const llvm::SmallVector< Frame >(const CallStackId)> Callback) const
void serialize(const MemProfSchema &Schema, raw_ostream &OS, IndexedVersion Version)
static GlobalValue::GUID getGUID(const StringRef FunctionName)
static size_t serializedSize(const MemProfSchema &Schema)
Adapter to write values to a stream in a particular byte order.