Changes in directory llvm/lib/Bitcode/Writer:
Writer.cpp updated: 1.4 -> 1.5 --- Log message: write out the symtab for globals. --- Diffs of the changes: (+70 -33) Writer.cpp | 103 +++++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 70 insertions(+), 33 deletions(-) Index: llvm/lib/Bitcode/Writer/Writer.cpp diff -u llvm/lib/Bitcode/Writer/Writer.cpp:1.4 llvm/lib/Bitcode/Writer/Writer.cpp:1.5 --- llvm/lib/Bitcode/Writer/Writer.cpp:1.4 Mon Apr 23 13:58:34 2007 +++ llvm/lib/Bitcode/Writer/Writer.cpp Mon Apr 23 15:35:01 2007 @@ -18,6 +18,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/TypeSymbolTable.h" +#include "llvm/ValueSymbolTable.h" #include "llvm/Support/MathExtras.h" using namespace llvm; @@ -126,39 +127,6 @@ Stream.ExitBlock(); } -/// WriteTypeSymbolTable - Emit a block for the specified type symtab. -static void WriteTypeSymbolTable(const TypeSymbolTable &TST, - const ValueEnumerator &VE, - BitstreamWriter &Stream) { - if (TST.empty()) return; - - Stream.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID, 3); - - // FIXME: Set up the abbrev, we know how many types there are! - // FIXME: We know if the type names can use 7-bit ascii. - - SmallVector<unsigned, 64> NameVals; - - for (TypeSymbolTable::const_iterator TI = TST.begin(), TE = TST.end(); - TI != TE; ++TI) { - unsigned AbbrevToUse = 0; - - // TST_ENTRY: [typeid, namelen, namechar x N] - NameVals.push_back(VE.getTypeID(TI->second)); - - const std::string &Str = TI->first; - NameVals.push_back(Str.size()); - for (unsigned i = 0, e = Str.size(); i != e; ++i) - NameVals.push_back(Str[i]); - - // Emit the finished record. - Stream.EmitRecord(bitc::TST_ENTRY_CODE, NameVals, AbbrevToUse); - NameVals.clear(); - } - - Stream.ExitBlock(); -} - static unsigned getEncodedLinkage(const GlobalValue *GV) { switch (GV->getLinkage()) { default: assert(0 && "Invalid linkage!"); @@ -302,6 +270,71 @@ } +/// WriteTypeSymbolTable - Emit a block for the specified type symtab. +static void WriteTypeSymbolTable(const TypeSymbolTable &TST, + const ValueEnumerator &VE, + BitstreamWriter &Stream) { + if (TST.empty()) return; + + Stream.EnterSubblock(bitc::TYPE_SYMTAB_BLOCK_ID, 3); + + // FIXME: Set up the abbrev, we know how many types there are! + // FIXME: We know if the type names can use 7-bit ascii. + + SmallVector<unsigned, 64> NameVals; + + for (TypeSymbolTable::const_iterator TI = TST.begin(), TE = TST.end(); + TI != TE; ++TI) { + unsigned AbbrevToUse = 0; + + // TST_ENTRY: [typeid, namelen, namechar x N] + NameVals.push_back(VE.getTypeID(TI->second)); + + const std::string &Str = TI->first; + NameVals.push_back(Str.size()); + for (unsigned i = 0, e = Str.size(); i != e; ++i) + NameVals.push_back(Str[i]); + + // Emit the finished record. + Stream.EmitRecord(bitc::TST_ENTRY_CODE, NameVals, AbbrevToUse); + NameVals.clear(); + } + + Stream.ExitBlock(); +} + +// Emit names for globals/functions etc. +static void WriteValueSymbolTable(const ValueSymbolTable &VST, + const ValueEnumerator &VE, + BitstreamWriter &Stream) { + if (VST.empty()) return; + Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 3); + + // FIXME: Set up the abbrev, we know how many values there are! + // FIXME: We know if the type names can use 7-bit ascii. + SmallVector<unsigned, 64> NameVals; + + for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end(); + SI != SE; ++SI) { + unsigned AbbrevToUse = 0; + + // VST_ENTRY: [valueid, namelen, namechar x N] + NameVals.push_back(VE.getValueID(SI->getValue())); + + NameVals.push_back(SI->getKeyLength()); + for (const char *P = SI->getKeyData(), + *E = SI->getKeyData()+SI->getKeyLength(); P != E; ++P) + NameVals.push_back((unsigned char)*P); + + // Emit the finished record. + Stream.EmitRecord(bitc::VST_ENTRY_CODE, NameVals, AbbrevToUse); + NameVals.clear(); + } + Stream.ExitBlock(); +} + + + /// WriteModule - Emit the specified module to the bitstream. static void WriteModule(const Module *M, BitstreamWriter &Stream) { Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3); @@ -327,6 +360,10 @@ // Emit the type symbol table information. WriteTypeSymbolTable(M->getTypeSymbolTable(), VE, Stream); + + // Emit names for globals/functions etc. + WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream); + Stream.ExitBlock(); } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits