diff options
author | Stephen Hines <srhines@google.com> | 2014-12-01 14:51:49 -0800 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2014-12-02 16:08:10 -0800 |
commit | 37ed9c199ca639565f6ce88105f9e39e898d82d0 (patch) | |
tree | 8fb36d3910e3ee4c4e1b7422f4f017108efc52f5 /lib/Bitcode/Reader/BitstreamReader.cpp | |
parent | d2327b22152ced7bc46dc629fc908959e8a52d03 (diff) | |
download | external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.zip external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.tar.gz external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.tar.bz2 |
Update aosp/master LLVM for rebase to r222494.
Change-Id: Ic787f5e0124df789bd26f3f24680f45e678eef2d
Diffstat (limited to 'lib/Bitcode/Reader/BitstreamReader.cpp')
-rw-r--r-- | lib/Bitcode/Reader/BitstreamReader.cpp | 89 |
1 files changed, 24 insertions, 65 deletions
diff --git a/lib/Bitcode/Reader/BitstreamReader.cpp b/lib/Bitcode/Reader/BitstreamReader.cpp index 72451ec..5e3232e 100644 --- a/lib/Bitcode/Reader/BitstreamReader.cpp +++ b/lib/Bitcode/Reader/BitstreamReader.cpp @@ -15,41 +15,11 @@ using namespace llvm; // BitstreamCursor implementation //===----------------------------------------------------------------------===// -void BitstreamCursor::operator=(const BitstreamCursor &RHS) { - freeState(); - - BitStream = RHS.BitStream; - NextChar = RHS.NextChar; - CurWord = RHS.CurWord; - BitsInCurWord = RHS.BitsInCurWord; - CurCodeSize = RHS.CurCodeSize; - - // Copy abbreviations, and bump ref counts. - CurAbbrevs = RHS.CurAbbrevs; - for (size_t i = 0, e = CurAbbrevs.size(); i != e; ++i) - CurAbbrevs[i]->addRef(); - - // Copy block scope and bump ref counts. - BlockScope = RHS.BlockScope; - for (size_t S = 0, e = BlockScope.size(); S != e; ++S) { - std::vector<BitCodeAbbrev*> &Abbrevs = BlockScope[S].PrevAbbrevs; - for (size_t i = 0, e = Abbrevs.size(); i != e; ++i) - Abbrevs[i]->addRef(); - } -} - void BitstreamCursor::freeState() { // Free all the Abbrevs. - for (size_t i = 0, e = CurAbbrevs.size(); i != e; ++i) - CurAbbrevs[i]->dropRef(); CurAbbrevs.clear(); // Free all the Abbrevs in the block scope. - for (size_t S = 0, e = BlockScope.size(); S != e; ++S) { - std::vector<BitCodeAbbrev*> &Abbrevs = BlockScope[S].PrevAbbrevs; - for (size_t i = 0, e = Abbrevs.size(); i != e; ++i) - Abbrevs[i]->dropRef(); - } BlockScope.clear(); } @@ -63,10 +33,8 @@ bool BitstreamCursor::EnterSubBlock(unsigned BlockID, unsigned *NumWordsP) { // Add the abbrevs specific to this block to the CurAbbrevs list. if (const BitstreamReader::BlockInfo *Info = BitStream->getBlockInfo(BlockID)) { - for (size_t i = 0, e = Info->Abbrevs.size(); i != e; ++i) { - CurAbbrevs.push_back(Info->Abbrevs[i]); - CurAbbrevs.back()->addRef(); - } + CurAbbrevs.insert(CurAbbrevs.end(), Info->Abbrevs.begin(), + Info->Abbrevs.end()); } // Get the codesize of this block. @@ -82,16 +50,9 @@ bool BitstreamCursor::EnterSubBlock(unsigned BlockID, unsigned *NumWordsP) { return false; } -void BitstreamCursor::readAbbreviatedLiteral(const BitCodeAbbrevOp &Op, - SmallVectorImpl<uint64_t> &Vals) { - assert(Op.isLiteral() && "Not a literal"); - // If the abbrev specifies the literal value to use, use it. - Vals.push_back(Op.getLiteralValue()); -} - -void BitstreamCursor::readAbbreviatedField(const BitCodeAbbrevOp &Op, - SmallVectorImpl<uint64_t> &Vals) { - assert(!Op.isLiteral() && "Use ReadAbbreviatedLiteral for literals!"); +static uint64_t readAbbreviatedField(BitstreamCursor &Cursor, + const BitCodeAbbrevOp &Op) { + assert(!Op.isLiteral() && "Not to be used with literals!"); // Decode the value as we are commanded. switch (Op.getEncoding()) { @@ -99,19 +60,18 @@ void BitstreamCursor::readAbbreviatedField(const BitCodeAbbrevOp &Op, case BitCodeAbbrevOp::Blob: llvm_unreachable("Should not reach here"); case BitCodeAbbrevOp::Fixed: - Vals.push_back(Read((unsigned)Op.getEncodingData())); - break; + return Cursor.Read((unsigned)Op.getEncodingData()); case BitCodeAbbrevOp::VBR: - Vals.push_back(ReadVBR64((unsigned)Op.getEncodingData())); - break; + return Cursor.ReadVBR64((unsigned)Op.getEncodingData()); case BitCodeAbbrevOp::Char6: - Vals.push_back(BitCodeAbbrevOp::DecodeChar6(Read(6))); - break; + return BitCodeAbbrevOp::DecodeChar6(Cursor.Read(6)); } + llvm_unreachable("invalid abbreviation encoding"); } -void BitstreamCursor::skipAbbreviatedField(const BitCodeAbbrevOp &Op) { - assert(!Op.isLiteral() && "Use ReadAbbreviatedLiteral for literals!"); +static void skipAbbreviatedField(BitstreamCursor &Cursor, + const BitCodeAbbrevOp &Op) { + assert(!Op.isLiteral() && "Not to be used with literals!"); // Decode the value as we are commanded. switch (Op.getEncoding()) { @@ -119,13 +79,13 @@ void BitstreamCursor::skipAbbreviatedField(const BitCodeAbbrevOp &Op) { case BitCodeAbbrevOp::Blob: llvm_unreachable("Should not reach here"); case BitCodeAbbrevOp::Fixed: - (void)Read((unsigned)Op.getEncodingData()); + Cursor.Read((unsigned)Op.getEncodingData()); break; case BitCodeAbbrevOp::VBR: - (void)ReadVBR64((unsigned)Op.getEncodingData()); + Cursor.ReadVBR64((unsigned)Op.getEncodingData()); break; case BitCodeAbbrevOp::Char6: - (void)Read(6); + Cursor.Read(6); break; } } @@ -153,7 +113,7 @@ void BitstreamCursor::skipRecord(unsigned AbbrevID) { if (Op.getEncoding() != BitCodeAbbrevOp::Array && Op.getEncoding() != BitCodeAbbrevOp::Blob) { - skipAbbreviatedField(Op); + skipAbbreviatedField(*this, Op); continue; } @@ -167,7 +127,7 @@ void BitstreamCursor::skipRecord(unsigned AbbrevID) { // Read all the elements. for (; NumElts; --NumElts) - skipAbbreviatedField(EltEnc); + skipAbbreviatedField(*this, EltEnc); continue; } @@ -207,22 +167,22 @@ unsigned BitstreamCursor::readRecord(unsigned AbbrevID, // Read the record code first. assert(Abbv->getNumOperandInfos() != 0 && "no record code in abbreviation?"); const BitCodeAbbrevOp &CodeOp = Abbv->getOperandInfo(0); + unsigned Code; if (CodeOp.isLiteral()) - readAbbreviatedLiteral(CodeOp, Vals); + Code = CodeOp.getLiteralValue(); else - readAbbreviatedField(CodeOp, Vals); - unsigned Code = (unsigned)Vals.pop_back_val(); + Code = readAbbreviatedField(*this, CodeOp); for (unsigned i = 1, e = Abbv->getNumOperandInfos(); i != e; ++i) { const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i); if (Op.isLiteral()) { - readAbbreviatedLiteral(Op, Vals); + Vals.push_back(Op.getLiteralValue()); continue; } if (Op.getEncoding() != BitCodeAbbrevOp::Array && Op.getEncoding() != BitCodeAbbrevOp::Blob) { - readAbbreviatedField(Op, Vals); + Vals.push_back(readAbbreviatedField(*this, Op)); continue; } @@ -236,7 +196,7 @@ unsigned BitstreamCursor::readRecord(unsigned AbbrevID, // Read all the elements. for (; NumElts; --NumElts) - readAbbreviatedField(EltEnc, Vals); + Vals.push_back(readAbbreviatedField(*this, EltEnc)); continue; } @@ -339,9 +299,8 @@ bool BitstreamCursor::ReadBlockInfoBlock() { // ReadAbbrevRecord installs the abbrev in CurAbbrevs. Move it to the // appropriate BlockInfo. - BitCodeAbbrev *Abbv = CurAbbrevs.back(); + CurBlockInfo->Abbrevs.push_back(std::move(CurAbbrevs.back())); CurAbbrevs.pop_back(); - CurBlockInfo->Abbrevs.push_back(Abbv); continue; } |