BitstreamRemarkContainer.h revision 360784
1//===-- BitstreamRemarkContainer.h - Container for remarks --------------*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file provides declarations for things used in the various types of 10// remark containers. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_REMARKS_REMARK_CONTAINER_H 15#define LLVM_REMARKS_REMARK_CONTAINER_H 16 17#include "llvm/ADT/StringRef.h" 18#include "llvm/Bitstream/BitCodes.h" 19#include <cstdint> 20 21namespace llvm { 22namespace remarks { 23 24/// The current version of the remark container. 25/// Note: this is different from the version of the remark entry. 26constexpr uint64_t CurrentContainerVersion = 0; 27/// The magic number used for identifying remark blocks. 28constexpr StringLiteral ContainerMagic("RMRK"); 29 30/// Type of the remark container. 31/// The remark container has two modes: 32/// * separate: the metadata is separate from the remarks and points to the 33/// auxiliary file that contains the remarks. 34/// * standalone: the metadata and the remarks are emitted together. 35enum class BitstreamRemarkContainerType { 36 /// The metadata emitted separately. 37 /// This will contain the following: 38 /// * Container version and type 39 /// * String table 40 /// * External file 41 SeparateRemarksMeta, 42 /// The remarks emitted separately. 43 /// This will contain the following: 44 /// * Container version and type 45 /// * Remark version 46 SeparateRemarksFile, 47 /// Everything is emitted together. 48 /// This will contain the following: 49 /// * Container version and type 50 /// * Remark version 51 /// * String table 52 Standalone, 53 First = SeparateRemarksMeta, 54 Last = Standalone, 55}; 56 57/// The possible blocks that will be encountered in a bitstream remark 58/// container. 59enum BlockIDs { 60 /// The metadata block is mandatory. It should always come after the 61 /// BLOCKINFO_BLOCK, and contains metadata that should be used when parsing 62 /// REMARK_BLOCKs. 63 /// There should always be only one META_BLOCK. 64 META_BLOCK_ID = bitc::FIRST_APPLICATION_BLOCKID, 65 /// One remark entry is represented using a REMARK_BLOCK. There can be 66 /// multiple REMARK_BLOCKs in the same file. 67 REMARK_BLOCK_ID 68}; 69 70constexpr StringRef MetaBlockName = StringRef("Meta", 4); 71constexpr StringRef RemarkBlockName = StringRef("Remark", 6); 72 73/// The possible records that can be encountered in the previously described 74/// blocks. 75enum RecordIDs { 76 // Meta block records. 77 RECORD_META_CONTAINER_INFO = 1, 78 RECORD_META_REMARK_VERSION, 79 RECORD_META_STRTAB, 80 RECORD_META_EXTERNAL_FILE, 81 // Remark block records. 82 RECORD_REMARK_HEADER, 83 RECORD_REMARK_DEBUG_LOC, 84 RECORD_REMARK_HOTNESS, 85 RECORD_REMARK_ARG_WITH_DEBUGLOC, 86 RECORD_REMARK_ARG_WITHOUT_DEBUGLOC, 87 // Helpers. 88 RECORD_FIRST = RECORD_META_CONTAINER_INFO, 89 RECORD_LAST = RECORD_REMARK_ARG_WITHOUT_DEBUGLOC 90}; 91 92constexpr StringRef MetaContainerInfoName = StringRef("Container info", 14); 93constexpr StringRef MetaRemarkVersionName = StringRef("Remark version", 14); 94constexpr StringRef MetaStrTabName = StringRef("String table", 12); 95constexpr StringRef MetaExternalFileName = StringRef("External File", 13); 96constexpr StringRef RemarkHeaderName = StringRef("Remark header", 13); 97constexpr StringRef RemarkDebugLocName = StringRef("Remark debug location", 21); 98constexpr StringRef RemarkHotnessName = StringRef("Remark hotness", 14); 99constexpr StringRef RemarkArgWithDebugLocName = 100 StringRef("Argument with debug location", 28); 101constexpr StringRef RemarkArgWithoutDebugLocName = StringRef("Argument", 8); 102 103} // end namespace remarks 104} // end namespace llvm 105 106#endif /* LLVM_REMARKS_REMARK_CONTAINER_H */ 107