Files
gps/tools/local/circt/include/llvm/ProfileData/MemProfSummary.h
T
2026-07-12 11:01:51 +03:00

77 lines
3.2 KiB
C++

//===- MemProfSummary.h - MemProf summary support ---------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file contains MemProf summary support.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_PROFILEDATA_MEMPROFSUMMARY_H
#define LLVM_PROFILEDATA_MEMPROFSUMMARY_H
#include "llvm/ProfileData/DataAccessProf.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/Support/Compiler.h"
namespace llvm {
namespace memprof {
class MemProfSummary {
private:
/// The number of summary fields below, which is used to enable some forwards
/// and backwards compatibility for the summary when serialized in the indexed
/// MemProf format. As long as no existing summary fields are removed or
/// reordered, and new summary fields are added after existing summary fields,
/// the MemProf indexed profile version does not need to be bumped to
/// accommodate new summary fields.
static constexpr unsigned NumSummaryFields = 6;
const uint64_t NumContexts, NumColdContexts, NumHotContexts;
const uint64_t MaxColdTotalSize, MaxWarmTotalSize, MaxHotTotalSize;
// MemProf v3 and prior versions don't have data access profile,
// so record the data access profile state.
bool HasDataAccessProfile = false;
size_t NumHotSymbolsAndStringLiterals = 0;
size_t NumKnownColdSymbols = 0;
size_t NumKnownColdStringLiterals = 0;
public:
MemProfSummary(uint64_t NumContexts, uint64_t NumColdContexts,
uint64_t NumHotContexts, uint64_t MaxColdTotalSize,
uint64_t MaxWarmTotalSize, uint64_t MaxHotTotalSize)
: NumContexts(NumContexts), NumColdContexts(NumColdContexts),
NumHotContexts(NumHotContexts), MaxColdTotalSize(MaxColdTotalSize),
MaxWarmTotalSize(MaxWarmTotalSize), MaxHotTotalSize(MaxHotTotalSize),
HasDataAccessProfile(false) {}
static constexpr unsigned getNumSummaryFields() { return NumSummaryFields; }
uint64_t getNumContexts() const { return NumContexts; }
uint64_t getNumColdContexts() const { return NumColdContexts; }
uint64_t getNumHotContexts() const { return NumHotContexts; }
uint64_t getMaxColdTotalSize() const { return MaxColdTotalSize; }
uint64_t getMaxWarmTotalSize() const { return MaxWarmTotalSize; }
uint64_t getMaxHotTotalSize() const { return MaxHotTotalSize; }
LLVM_ABI void printSummaryYaml(raw_ostream &OS) const;
/// Write to indexed MemProf profile.
LLVM_ABI void write(ProfOStream &OS) const;
/// Read from indexed MemProf profile.
LLVM_ABI static std::unique_ptr<MemProfSummary>
deserialize(const unsigned char *&);
/// Build data access profile summary from \p DataAccessProfile.
/// The pointer is not owned.
/// TODO: Remove this function after the data access profile summary is
/// serialized.
LLVM_ABI void
buildDataAccessSummary(const DataAccessProfData &DataAccessProfile);
};
} // namespace memprof
} // namespace llvm
#endif // LLVM_PROFILEDATA_MEMPROFSUMMARY_H