Remove ReadArchiveFile (functionality moved to Archive.h). Add an alternate form...
[oota-llvm.git] / include / llvm / Bytecode / Format.h
index 466865e32db7f34712a36af065b65c8d15a54a1f..5620aa72112546215129b02c6a6f70c7e9485032 100644 (file)
@@ -32,16 +32,66 @@ public:
     SymbolTable,
     ModuleGlobalInfo,
     GlobalTypePlane,
+    DependentLibs,
 
     // Function subtypes:
     // Can also have ConstantPool block
     // Can also have SymbolTable block
-    BasicBlock = 0x31,        // May contain many basic blocks
+    BasicBlock = 0x31,// May contain many basic blocks (obsolete since LLVM 1.1)
 
     // InstructionList - The instructions in the body of a function.  This
-    // superceeds the old BasicBlock node.
+    // superceeds the old BasicBlock node used in LLVM 1.0.
     InstructionList = 0x32,
+
+    // CompactionTable - blocks with this id are used to define local remapping
+    // tables for a function, allowing the indices used within the function to
+    // be as small as possible.  This often allows the instructions to be
+    // encoded more efficiently.
+    CompactionTable = 0x33,
   };
+
+  /// In LLVM 1.3 format, 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 CompressedBytecodeBlockIdentifiers {
+
+    // Zero value ist verbotten!
+    Reserved_DoNotUse = 0x00,      ///< Don't use this!
+
+    // This is the uber block that contains the rest of the blocks.
+    ModuleBlockID = 0x01,          ///< 1.3 identifier for modules
+
+    // Module subtypes:
+
+    // This is the identifier for a function
+    FunctionBlockID = 0x02,        ///< 1.3 identifier for Functions
+    ConstantPoolBlockID = 0x03,    ///< 1.3 identifier for constant pool
+    SymbolTableBlockID = 0x04,     ///< 1.3 identifier for symbol table
+    ModuleGlobalInfoBlockID = 0x05,///< 1.3 identifier for module globals
+    GlobalTypePlaneBlockID = 0x06, ///< 1.3 identifier for global types
+
+    // Function subtypes:
+
+    // InstructionList - The instructions in the body of a function.  This
+    // superceeds the old BasicBlock node used in LLVM 1.0.
+    InstructionListBlockID = 0x07, ///< 1.3 identifier for insruction list      
+
+    // CompactionTable - blocks with this id are used to define local remapping
+    // tables for a function, allowing the indices used within the function to
+    // be as small as possible.  This often allows the instructions to be
+    // encoded more efficiently.
+    CompactionTableBlockID = 0x08, ///< 1.3 identifier for compaction tables
+
+    // Not a block id, just used to count them
+    NumberOfBlockIDs
+  };
+
 };
 
 } // End llvm namespace