All bitcode files can optionally include a BLOCKINFO block, which contains metadata about other blocks in the file. The only top-level block types are MODULE, IDENTIFICATION, STRTAB and SYMTAB.
pub const BlockId = enum(u5)
pub const BlockId = enum(u5) {
/// BLOCKINFO_BLOCK is used to define metadata about blocks, for example,
/// standard abbrevs that should be available to all blocks of a specified
/// ID.
BLOCKINFO = 0,
/// Blocks
MODULE = FIRST_APPLICATION,
/// Module sub-block id's.
PARAMATTR,
PARAMATTR_GROUP,
CONSTANTS,
FUNCTION,
/// Block intended to contains information on the bitcode versioning.
/// Can be used to provide better error messages when we fail to parse a
/// bitcode file.
IDENTIFICATION,
VALUE_SYMTAB,
METADATA,
METADATA_ATTACHMENT,
TYPE,
USELIST,
MODULE_STRTAB,
GLOBALVAL_SUMMARY,
OPERAND_BUNDLE_TAGS,
METADATA_KIND,
STRTAB,
FULL_LTO_GLOBALVAL_SUMMARY,
SYMTAB,
SYNC_SCOPE_NAMES,
/// Block IDs 1-7 are reserved for future expansion.
pub const FIRST_APPLICATION = 8;
}