1 //===- BitCodeEnums.h - Core enums for the bitstream format -----*- C++ -*-===// 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 header defines "core" bitstream enum values. 10 // It has been separated from the other header that defines bitstream enum 11 // values, BitCodes.h, to allow tools to track changes to the various 12 // bitstream and bitcode enums without needing to fully or partially build 13 // LLVM itself. 14 // 15 // The enum values defined in this file should be considered permanent. If 16 // new features are added, they should have values added at the end of the 17 // respective lists. 18 // 19 //===----------------------------------------------------------------------===// 20 21 #ifndef LLVM_BITSTREAM_BITCODEENUMS_H 22 #define LLVM_BITSTREAM_BITCODEENUMS_H 23 24 namespace llvm { 25 /// Offsets of the 32-bit fields of bitstream wrapper header. 26 enum BitstreamWrapperHeader : unsigned { 27 BWH_MagicField = 0 * 4, 28 BWH_VersionField = 1 * 4, 29 BWH_OffsetField = 2 * 4, 30 BWH_SizeField = 3 * 4, 31 BWH_CPUTypeField = 4 * 4, 32 BWH_HeaderSize = 5 * 4 33 }; 34 35 namespace bitc { 36 enum StandardWidths { 37 BlockIDWidth = 8, // We use VBR-8 for block IDs. 38 CodeLenWidth = 4, // Codelen are VBR-4. 39 BlockSizeWidth = 32 // BlockSize up to 2^32 32-bit words = 16GB per block. 40 }; 41 42 // The standard abbrev namespace always has a way to exit a block, enter a 43 // nested block, define abbrevs, and define an unabbreviated record. 44 enum FixedAbbrevIDs { 45 END_BLOCK = 0, // Must be zero to guarantee termination for broken bitcode. 46 ENTER_SUBBLOCK = 1, 47 48 /// DEFINE_ABBREV - Defines an abbrev for the current block. It consists 49 /// of a vbr5 for # operand infos. Each operand info is emitted with a 50 /// single bit to indicate if it is a literal encoding. If so, the value is 51 /// emitted with a vbr8. If not, the encoding is emitted as 3 bits followed 52 /// by the info value as a vbr5 if needed. 53 DEFINE_ABBREV = 2, 54 55 // UNABBREV_RECORDs are emitted with a vbr6 for the record code, followed by 56 // a vbr6 for the # operands, followed by vbr6's for each operand. 57 UNABBREV_RECORD = 3, 58 59 // This is not a code, this is a marker for the first abbrev assignment. 60 FIRST_APPLICATION_ABBREV = 4 61 }; 62 63 /// StandardBlockIDs - All bitcode files can optionally include a BLOCKINFO 64 /// block, which contains metadata about other blocks in the file. 65 enum StandardBlockIDs { 66 /// BLOCKINFO_BLOCK is used to define metadata about blocks, for example, 67 /// standard abbrevs that should be available to all blocks of a specified 68 /// ID. 69 BLOCKINFO_BLOCK_ID = 0, 70 71 // Block IDs 1-7 are reserved for future expansion. 72 FIRST_APPLICATION_BLOCKID = 8 73 }; 74 75 /// BlockInfoCodes - The blockinfo block contains metadata about user-defined 76 /// blocks. 77 enum BlockInfoCodes { 78 // DEFINE_ABBREV has magic semantics here, applying to the current SETBID'd 79 // block, instead of the BlockInfo block. 80 81 BLOCKINFO_CODE_SETBID = 1, // SETBID: [blockid#] 82 BLOCKINFO_CODE_BLOCKNAME = 2, // BLOCKNAME: [name] 83 BLOCKINFO_CODE_SETRECORDNAME = 3 // BLOCKINFO_CODE_SETRECORDNAME: 84 // [id, name] 85 }; 86 87 } // namespace bitc 88 } // namespace llvm 89 90 #endif 91