Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.