minor cleanups. Add provisions for a new standard BLOCKINFO_BLOCK

block type.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36748 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2007-05-04 18:25:49 +00:00
parent 299b2d2070
commit a727d5502c
4 changed files with 41 additions and 17 deletions

View File

@ -30,9 +30,9 @@ namespace bitc {
BlockSizeWidth = 32 // BlockSize up to 2^32 32-bit words = 32GB per block. 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. // 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. END_BLOCK = 0, // Must be zero to guarantee termination for broken bitcode.
ENTER_SUBBLOCK = 1, ENTER_SUBBLOCK = 1,
@ -48,8 +48,29 @@ namespace bitc {
UNABBREV_RECORD = 3, UNABBREV_RECORD = 3,
// This is not a code, this is a marker for the first abbrev assignment. // 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 } // End bitc namespace
/// BitCodeAbbrevOp - This describes one or more operands in an abbreviation. /// BitCodeAbbrevOp - This describes one or more operands in an abbreviation.
@ -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 { class BitCodeAbbrev {
SmallVector<BitCodeAbbrevOp, 8> OperandList; SmallVector<BitCodeAbbrevOp, 8> OperandList;
unsigned char RefCount; // Number of things using this. unsigned char RefCount; // Number of things using this.

View File

@ -283,7 +283,7 @@ public:
return Code; return Code;
} }
unsigned AbbrevNo = AbbrevID-bitc::FIRST_ABBREV; unsigned AbbrevNo = AbbrevID-bitc::FIRST_APPLICATION_ABBREV;
assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!"); assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo]; BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];

View File

@ -194,7 +194,7 @@ public:
void EmitRecord(unsigned Code, SmallVectorImpl<uint64_t> &Vals, void EmitRecord(unsigned Code, SmallVectorImpl<uint64_t> &Vals,
unsigned Abbrev = 0) { unsigned Abbrev = 0) {
if (Abbrev) { if (Abbrev) {
unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV; unsigned AbbrevNo = Abbrev-bitc::FIRST_APPLICATION_ABBREV;
assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!"); assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo]; BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
@ -247,7 +247,7 @@ public:
void EmitRecord(unsigned Code, SmallVectorImpl<unsigned> &Vals, void EmitRecord(unsigned Code, SmallVectorImpl<unsigned> &Vals,
unsigned Abbrev = 0) { unsigned Abbrev = 0) {
if (Abbrev) { if (Abbrev) {
unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV; unsigned AbbrevNo = Abbrev-bitc::FIRST_APPLICATION_ABBREV;
assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!"); assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo]; BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
@ -318,7 +318,7 @@ public:
} }
CurAbbrevs.push_back(Abbv); CurAbbrevs.push_back(Abbv);
return CurAbbrevs.size()-1+bitc::FIRST_ABBREV; return CurAbbrevs.size()-1+bitc::FIRST_APPLICATION_ABBREV;
} }
}; };

View File

@ -25,15 +25,15 @@ namespace bitc {
// The only top-level block type defined is for a module. // The only top-level block type defined is for a module.
enum BlockIDs { enum BlockIDs {
// Blocks // Blocks
MODULE_BLOCK_ID = 0, MODULE_BLOCK_ID = FIRST_APPLICATION_BLOCKID,
// Module sub-block id's // Module sub-block id's.
PARAMATTR_BLOCK_ID = 1, PARAMATTR_BLOCK_ID,
TYPE_BLOCK_ID = 2, TYPE_BLOCK_ID,
CONSTANTS_BLOCK_ID = 3, CONSTANTS_BLOCK_ID,
FUNCTION_BLOCK_ID = 4, FUNCTION_BLOCK_ID,
TYPE_SYMTAB_BLOCK_ID = 5, TYPE_SYMTAB_BLOCK_ID,
VALUE_SYMTAB_BLOCK_ID = 6 VALUE_SYMTAB_BLOCK_ID
}; };
@ -68,7 +68,7 @@ namespace bitc {
/// TYPE blocks have codes for each type primitive they use. /// TYPE blocks have codes for each type primitive they use.
enum TypeCodes { enum TypeCodes {
TYPE_CODE_NUMENTRY = 1, // TYPE_CODE_NUMENTRY: [numentries] TYPE_CODE_NUMENTRY = 1, // NUMENTRY: [numentries]
// Type Codes // Type Codes
TYPE_CODE_VOID = 2, // VOID TYPE_CODE_VOID = 2, // VOID