blob: fc896b895d0486556ac13b3fa3dc82370cd88a36 [file] [log] [blame]
//===-- llvm/Bytecode/Format.h - VM bytecode file format info ---*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This header defines intrinsic constants that are useful to libraries that
// need to hack on bytecode files directly, like the reader and writer.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_BYTECODE_FORMAT_H
#define LLVM_BYTECODE_FORMAT_H
namespace llvm {
class BytecodeFormat { // Throw the constants into a poorman's namespace...
BytecodeFormat(); // do not implement
public:
/// The the identifier and the size of the block are encoded into a single
/// vbr_uint32 with 5 bits for the block identifier and 27-bits for block
/// length. This limits blocks to a maximum of
/// 128MBytes of data, and block types to 31 which should be sufficient
/// for the foreseeable usage. Because the values of block identifiers MUST
/// fit within 5 bits (values 1-31), this enumeration is used to ensure
/// smaller values are used for 1.3 and subsequent bytecode versions.
/// @brief The block number identifiers used in LLVM 1.3 bytecode
/// format.
enum BytecodeBlockIdentifiers {
Reserved_DoNotUse = 0, ///< Zero value is forbidden, do not use.
ModuleBlockID = 1, ///< Module block that contains other blocks.
FunctionBlockID = 2, ///< Function block identifier
ConstantPoolBlockID = 3, ///< Constant pool identifier
ValueSymbolTableBlockID= 4, ///< Value Symbol table identifier
ModuleGlobalInfoBlockID= 5, ///< Module global info identifier
GlobalTypePlaneBlockID = 6, ///< Global type plan identifier
InstructionListBlockID = 7, ///< All instructions in a function
/// Blocks with this id are used to define a function local remapping
/// table for the function's values. This allows the indices used within
/// the function to be as small as possible. This often allows the
/// instructions to be encoded more efficiently because VBR takes fewer
/// bytes with smaller values.
/// @brief Value Compaction Table Block
CompactionTableBlockID = 8,
TypeSymbolTableBlockID = 9, ///< Value Symbol table identifier
// Not a block id, just used to count them
NumberOfBlockIDs
};
};
} // End llvm namespace
#endif