diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-12 22:34:10 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-12 22:34:10 +0000 |
commit | b1ad5d39a9815c1788cbe30072d48e9d5da3646f (patch) | |
tree | 423d98a43baf5155377b1d01acd21f1620bd5d77 /llvm/lib/Bitcode/Writer | |
parent | f8dd6ad6de4b8f605a2e0dcbc2bbecabfcecfb69 (diff) | |
download | bcm5719-llvm-b1ad5d39a9815c1788cbe30072d48e9d5da3646f.tar.gz bcm5719-llvm-b1ad5d39a9815c1788cbe30072d48e9d5da3646f.zip |
Bitcode: Add abbreviation for METADATA_NAME
llvm-svn: 225715
Diffstat (limited to 'llvm/lib/Bitcode/Writer')
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 06fc7f29b71..8e1610982c4 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -798,6 +798,16 @@ static void WriteModuleMetadata(const Module *M, MDSAbbrev = Stream.EmitAbbrev(Abbv); } + unsigned NameAbbrev = 0; + if (!M->named_metadata_empty()) { + // Abbrev for METADATA_NAME. + BitCodeAbbrev *Abbv = new BitCodeAbbrev(); + Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_NAME)); + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array)); + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8)); + NameAbbrev = Stream.EmitAbbrev(Abbv); + } + SmallVector<uint64_t, 64> Record; for (const Metadata *MD : MDs) { if (const MDNode *N = dyn_cast<MDNode>(MD)) { @@ -821,9 +831,8 @@ static void WriteModuleMetadata(const Module *M, for (const NamedMDNode &NMD : M->named_metadata()) { // Write name. StringRef Str = NMD.getName(); - for (unsigned i = 0, e = Str.size(); i != e; ++i) - Record.push_back(Str[i]); - Stream.EmitRecord(bitc::METADATA_NAME, Record, 0/*TODO*/); + Record.append(Str.bytes_begin(), Str.bytes_end()); + Stream.EmitRecord(bitc::METADATA_NAME, Record, NameAbbrev); Record.clear(); // Write named metadata operands. |