minor cleanups. Add provisions for a new standard BLOCKINFO_BLOCK
authorChris Lattner <sabre@nondot.org>
Fri, 4 May 2007 18:25:49 +0000 (18:25 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 4 May 2007 18:25:49 +0000 (18:25 +0000)
block type.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36748 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/BitCodes.h
include/llvm/Bitcode/BitstreamReader.h
include/llvm/Bitcode/BitstreamWriter.h
include/llvm/Bitcode/LLVMBitCodes.h

index 15a7a4943dc908582d218af720a7a1666e90a269..647c28fb398409df70da25453a55ff37724ce41f 100644 (file)
@@ -30,9 +30,9 @@ namespace bitc {
     BlockSizeWidth = 32  // BlockSize up to 2^32 32-bit words = 32GB per block.
   };
   
-  // The standard code namespace always has a way to exit a block, enter a
+  // The standard abbrev namespace always has a way to exit a block, enter a
   // nested block, define abbrevs, and define an unabbreviated record.
-  enum FixedCodes {
+  enum FixedAbbrevIDs {
     END_BLOCK = 0,  // Must be zero to guarantee termination for broken bitcode.
     ENTER_SUBBLOCK = 1,
 
@@ -48,8 +48,29 @@ namespace bitc {
     UNABBREV_RECORD = 3,
     
     // This is not a code, this is a marker for the first abbrev assignment.
-    FIRST_ABBREV = 4
+    FIRST_APPLICATION_ABBREV = 4
   };
+  
+  /// StandardBlockIDs - All bitcode files can optionally include a BLOCKINFO
+  /// block, which contains metadata about other blocks in the file.
+  enum StandardBlockIDs {
+    /// 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_BLOCK_ID = 0,
+    
+    // Block IDs 1-7 are reserved for future expansion.
+    FIRST_APPLICATION_BLOCKID = 8
+  };
+  
+  /// BlockInfoCodes - The blockinfo block contains metadata about user-defined
+  /// blocks.
+  enum BlockInfoCodes {
+    BLOCKINFO_CODE_SETBID = 1,  // SETBID: [blockid#]
+    BLOCKINFO_CODE_ABBREV = 2   // ABBREV: [standard abbrev encoding]
+    // BLOCKNAME: give string name to block, if desired.
+  };
+  
 } // End bitc namespace
 
 /// BitCodeAbbrevOp - This describes one or more operands in an abbreviation.
@@ -63,7 +84,7 @@ class BitCodeAbbrevOp {
   unsigned Enc   : 3;     // The encoding to use.
 public:
   enum Encoding {
-    FixedWidth = 1,   // A fixed with field, Val specifies number of bits.
+    FixedWidth = 1,  // A fixed with field, Val specifies number of bits.
     VBR        = 2   // A VBR field where Val specifies the width of each chunk.
   };
     
@@ -87,6 +108,9 @@ public:
   }
 };
 
+/// BitCodeAbbrev - This class represents an abbreviation record.  An
+/// abbreviation allows a complex record that has redundancy to be stored in a
+/// specialized format instead of the fully-general, fully-vbr, format.
 class BitCodeAbbrev {
   SmallVector<BitCodeAbbrevOp, 8> OperandList;
   unsigned char RefCount; // Number of things using this.
index bff4e537fd9746c6f1c5eb41c0f648064b573641..eac9ab0b607ad82f5bdbca5cc4e4e6c5dd3d25e6 100644 (file)
@@ -283,7 +283,7 @@ public:
       return Code;
     }
     
-    unsigned AbbrevNo = AbbrevID-bitc::FIRST_ABBREV;
+    unsigned AbbrevNo = AbbrevID-bitc::FIRST_APPLICATION_ABBREV;
     assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
     BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
 
index 808fa527e055ca239215b00560cca141db23cbd5..fcbcbbf0fb4c25edccb17ba384ea8c61df7ed2da 100644 (file)
@@ -194,7 +194,7 @@ public:
   void EmitRecord(unsigned Code, SmallVectorImpl<uint64_t> &Vals,
                   unsigned Abbrev = 0) {
     if (Abbrev) {
-      unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV;
+      unsigned AbbrevNo = Abbrev-bitc::FIRST_APPLICATION_ABBREV;
       assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
       BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
       
@@ -247,7 +247,7 @@ public:
   void EmitRecord(unsigned Code, SmallVectorImpl<unsigned> &Vals,
                   unsigned Abbrev = 0) {
     if (Abbrev) {
-      unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV;
+      unsigned AbbrevNo = Abbrev-bitc::FIRST_APPLICATION_ABBREV;
       assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
       BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
       
@@ -318,7 +318,7 @@ public:
     }
     
     CurAbbrevs.push_back(Abbv);
-    return CurAbbrevs.size()-1+bitc::FIRST_ABBREV;
+    return CurAbbrevs.size()-1+bitc::FIRST_APPLICATION_ABBREV;
   }
 };
 
index 40a9a2dfdc003714e9879ed444d727034ed35d3b..1ce411b0c0ad3e12db57841a1bf2d6951aa4811a 100644 (file)
@@ -25,15 +25,15 @@ namespace bitc {
   // The only top-level block type defined is for a module.
   enum BlockIDs {
     // Blocks
-    MODULE_BLOCK_ID          = 0,
+    MODULE_BLOCK_ID          = FIRST_APPLICATION_BLOCKID,
   
-    // Module sub-block id's
-    PARAMATTR_BLOCK_ID       = 1,
-    TYPE_BLOCK_ID            = 2,
-    CONSTANTS_BLOCK_ID       = 3,
-    FUNCTION_BLOCK_ID        = 4,
-    TYPE_SYMTAB_BLOCK_ID     = 5,
-    VALUE_SYMTAB_BLOCK_ID    = 6
+    // Module sub-block id's.
+    PARAMATTR_BLOCK_ID,
+    TYPE_BLOCK_ID,
+    CONSTANTS_BLOCK_ID,
+    FUNCTION_BLOCK_ID,
+    TYPE_SYMTAB_BLOCK_ID,
+    VALUE_SYMTAB_BLOCK_ID
   };
   
   
@@ -68,7 +68,7 @@ namespace bitc {
   
   /// TYPE blocks have codes for each type primitive they use.
   enum TypeCodes {
-    TYPE_CODE_NUMENTRY =  1,   // TYPE_CODE_NUMENTRY: [numentries]
+    TYPE_CODE_NUMENTRY =  1,   // NUMENTRY: [numentries]
     
     // Type Codes
     TYPE_CODE_VOID     =  2,   // VOID