//===- InstrProfReader.h - Instrumented profiling readers -------*- 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 support for reading profiling data for instrumentation // based PGO and coverage. // //===----------------------------------------------------------------------===// #ifndef LLVM_PROFILEDATA_INSTRPROFREADER_H #define LLVM_PROFILEDATA_INSTRPROFREADER_H #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/IR/ProfileSummary.h" #include "llvm/Object/BuildID.h" #include "llvm/ProfileData/InstrProf.h" #include "llvm/ProfileData/InstrProfCorrelator.h" #include "llvm/ProfileData/MemProf.h" #include "llvm/Support/Endian.h" #include "llvm/Support/Error.h" #include "llvm/Support/LineIterator.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/OnDiskHashTable.h" #include "llvm/Support/SwapByteOrder.h" #include <algorithm> #include <cassert> #include <cstddef> #include <cstdint> #include <iterator> #include <memory> #include <utility> #include <vector> namespace llvm { class InstrProfReader; namespace vfs { class FileSystem; } // namespace vfs /// A file format agnostic iterator over profiling data. template <class record_type = NamedInstrProfRecord, class reader_type = InstrProfReader> class InstrProfIterator { … }; /// Base class and interface for reading profiling data of any known instrprof /// format. Provides an iterator over NamedInstrProfRecords. class InstrProfReader { … }; /// Reader for the simple text based instrprof format. /// /// This format is a simple text format that's suitable for test data. Records /// are separated by one or more blank lines, and record fields are separated by /// new lines. /// /// Each record consists of a function name, a function hash, a number of /// counters, and then each counter value, in that order. class TextInstrProfReader : public InstrProfReader { … }; /// Reader for the raw instrprof binary format from runtime. /// /// This format is a raw memory dump of the instrumentation-based profiling data /// from the runtime. It has no index. /// /// Templated on the unsigned type whose size matches pointers on the platform /// that wrote the profile. template <class IntPtrT> class RawInstrProfReader : public InstrProfReader { … }; RawInstrProfReader32; RawInstrProfReader64; namespace IndexedInstrProf { enum class HashT : uint32_t; } // end namespace IndexedInstrProf /// Trait for lookups into the on-disk hash table for the binary instrprof /// format. class InstrProfLookupTrait { … }; struct InstrProfReaderIndexBase { … }; OnDiskHashTableImplV3; MemProfRecordHashTable; MemProfFrameHashTable; MemProfCallStackHashTable; template <typename HashTableImpl> class InstrProfReaderItaniumRemapper; template <typename HashTableImpl> class InstrProfReaderIndex : public InstrProfReaderIndexBase { … }; /// Name matcher supporting fuzzy matching of symbol names to names in profiles. class InstrProfReaderRemapper { … }; class IndexedMemProfReader { … }; /// Reader for the indexed binary instrprof format. class IndexedInstrProfReader : public InstrProfReader { … }; } // end namespace llvm #endif // LLVM_PROFILEDATA_INSTRPROFREADER_H