- //===-- BitstreamRemarkContainer.h - Container for remarks --------------*-===// 
- // 
- // 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 provides declarations for things used in the various types of 
- // remark containers. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_REMARKS_BITSTREAMREMARKCONTAINER_H 
- #define LLVM_REMARKS_BITSTREAMREMARKCONTAINER_H 
-   
- #include "llvm/ADT/StringRef.h" 
- #include "llvm/Bitstream/BitCodes.h" 
- #include <cstdint> 
-   
- namespace llvm { 
- namespace remarks { 
-   
- /// The current version of the remark container. 
- /// Note: this is different from the version of the remark entry. 
- constexpr uint64_t CurrentContainerVersion = 0; 
- /// The magic number used for identifying remark blocks. 
- constexpr StringLiteral ContainerMagic("RMRK"); 
-   
- /// Type of the remark container. 
- /// The remark container has two modes: 
- /// * separate: the metadata is separate from the remarks and points to the 
- ///             auxiliary file that contains the remarks. 
- /// * standalone: the metadata and the remarks are emitted together. 
- enum class BitstreamRemarkContainerType { 
-   /// The metadata emitted separately. 
-   /// This will contain the following: 
-   /// * Container version and type 
-   /// * String table 
-   /// * External file 
-   SeparateRemarksMeta, 
-   /// The remarks emitted separately. 
-   /// This will contain the following: 
-   /// * Container version and type 
-   /// * Remark version 
-   SeparateRemarksFile, 
-   /// Everything is emitted together. 
-   /// This will contain the following: 
-   /// * Container version and type 
-   /// * Remark version 
-   /// * String table 
-   Standalone, 
-   First = SeparateRemarksMeta, 
-   Last = Standalone, 
- }; 
-   
- /// The possible blocks that will be encountered in a bitstream remark 
- /// container. 
- enum BlockIDs { 
-   /// The metadata block is mandatory. It should always come after the 
-   /// BLOCKINFO_BLOCK, and contains metadata that should be used when parsing 
-   /// REMARK_BLOCKs. 
-   /// There should always be only one META_BLOCK. 
-   META_BLOCK_ID = bitc::FIRST_APPLICATION_BLOCKID, 
-   /// One remark entry is represented using a REMARK_BLOCK. There can be 
-   /// multiple REMARK_BLOCKs in the same file. 
-   REMARK_BLOCK_ID 
- }; 
-   
- constexpr StringRef MetaBlockName = StringRef("Meta", 4); 
- constexpr StringRef RemarkBlockName = StringRef("Remark", 6); 
-   
- /// The possible records that can be encountered in the previously described 
- /// blocks. 
- enum RecordIDs { 
-   // Meta block records. 
-   RECORD_META_CONTAINER_INFO = 1, 
-   RECORD_META_REMARK_VERSION, 
-   RECORD_META_STRTAB, 
-   RECORD_META_EXTERNAL_FILE, 
-   // Remark block records. 
-   RECORD_REMARK_HEADER, 
-   RECORD_REMARK_DEBUG_LOC, 
-   RECORD_REMARK_HOTNESS, 
-   RECORD_REMARK_ARG_WITH_DEBUGLOC, 
-   RECORD_REMARK_ARG_WITHOUT_DEBUGLOC, 
-   // Helpers. 
-   RECORD_FIRST = RECORD_META_CONTAINER_INFO, 
-   RECORD_LAST = RECORD_REMARK_ARG_WITHOUT_DEBUGLOC 
- }; 
-   
- constexpr StringRef MetaContainerInfoName = StringRef("Container info", 14); 
- constexpr StringRef MetaRemarkVersionName = StringRef("Remark version", 14); 
- constexpr StringRef MetaStrTabName = StringRef("String table", 12); 
- constexpr StringRef MetaExternalFileName = StringRef("External File", 13); 
- constexpr StringRef RemarkHeaderName = StringRef("Remark header", 13); 
- constexpr StringRef RemarkDebugLocName = StringRef("Remark debug location", 21); 
- constexpr StringRef RemarkHotnessName = StringRef("Remark hotness", 14); 
- constexpr StringRef RemarkArgWithDebugLocName = 
-     StringRef("Argument with debug location", 28); 
- constexpr StringRef RemarkArgWithoutDebugLocName = StringRef("Argument", 8); 
-   
- } // end namespace remarks 
- } // end namespace llvm 
-   
- #endif // LLVM_REMARKS_BITSTREAMREMARKCONTAINER_H 
-