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
24namespace llvm {
25/// Offsets of the 32-bit fields of bitstream wrapper header.
26enum 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
35namespace bitc {
36enum 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.
44enum 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.
65enum 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.
77enum 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