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_BITSTREAMREMARKCONTAINER_H 15 #define LLVM_REMARKS_BITSTREAMREMARKCONTAINER_H 16 17 #include "llvm/ADT/StringRef.h" 18 #include "llvm/Bitstream/BitCodes.h" 19 #include <cstdint> 20 21 namespace llvm { 22 namespace remarks { 23 24 /// The current version of the remark container. 25 /// Note: this is different from the version of the remark entry. 26 constexpr uint64_t CurrentContainerVersion = 0; 27 /// The magic number used for identifying remark blocks. 28 constexpr 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. 35 enum 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. 59 enum 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 70 constexpr StringRef MetaBlockName = StringRef("Meta", 4); 71 constexpr StringRef RemarkBlockName = StringRef("Remark", 6); 72 73 /// The possible records that can be encountered in the previously described 74 /// blocks. 75 enum 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 92 constexpr StringRef MetaContainerInfoName = StringRef("Container info", 14); 93 constexpr StringRef MetaRemarkVersionName = StringRef("Remark version", 14); 94 constexpr StringRef MetaStrTabName = StringRef("String table", 12); 95 constexpr StringRef MetaExternalFileName = StringRef("External File", 13); 96 constexpr StringRef RemarkHeaderName = StringRef("Remark header", 13); 97 constexpr StringRef RemarkDebugLocName = StringRef("Remark debug location", 21); 98 constexpr StringRef RemarkHotnessName = StringRef("Remark hotness", 14); 99 constexpr StringRef RemarkArgWithDebugLocName = 100 StringRef("Argument with debug location", 28); 101 constexpr StringRef RemarkArgWithoutDebugLocName = StringRef("Argument", 8); 102 103 } // end namespace remarks 104 } // end namespace llvm 105 106 #endif // LLVM_REMARKS_BITSTREAMREMARKCONTAINER_H 107