Skip to content

Commit

Permalink
wean Blob handling logic off of banging on NextChar directly. Instead…
Browse files Browse the repository at this point in the history
…, make

it reason about the current bit position, which is always independent of the
underlying cursors word size.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173063 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
lattner committed Jan 21, 2013
1 parent fd0543d commit 47543a8
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions lib/Bitcode/Reader/BitstreamReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,17 +184,17 @@ void BitstreamCursor::skipRecord(unsigned AbbrevID) {
SkipToFourByteBoundary(); // 32-bit alignment

// Figure out where the end of this blob will be including tail padding.
size_t NewEnd = NextChar+((NumElts+3)&~3);
size_t NewEnd = GetCurrentBitNo()+((NumElts+3)&~3)*8;

// If this would read off the end of the bitcode file, just set the
// record to empty and return.
if (!canSkipToPos(NewEnd)) {
if (!canSkipToPos(NewEnd/8)) {
NextChar = BitStream->getBitcodeBytes().getExtent();
break;
}

// Skip over the blob.
NextChar = NewEnd;
JumpToBit(NewEnd);
}
}

Expand Down Expand Up @@ -244,11 +244,12 @@ unsigned BitstreamCursor::readRecord(unsigned AbbrevID,
SkipToFourByteBoundary(); // 32-bit alignment

// Figure out where the end of this blob will be including tail padding.
size_t NewEnd = NextChar+((NumElts+3)&~3);
size_t CurBitPos = GetCurrentBitNo();
size_t NewEnd = CurBitPos+((NumElts+3)&~3)*8;

// If this would read off the end of the bitcode file, just set the
// record to empty and return.
if (!canSkipToPos(NewEnd)) {
if (!canSkipToPos(NewEnd/8)) {
Vals.append(NumElts, 0);
NextChar = BitStream->getBitcodeBytes().getExtent();
break;
Expand All @@ -259,14 +260,16 @@ unsigned BitstreamCursor::readRecord(unsigned AbbrevID,
if (Blob) {
*Blob =
StringRef((const char*)BitStream->getBitcodeBytes().getPointer(
NextChar, NumElts),
NumElts);
CurBitPos/8, NumElts),
NumElts);
} else {
for (; NumElts; ++NextChar, --NumElts)
Vals.push_back(getByte(NextChar));
// FIXME: This is a brutally inefficient way to do this. Why isn't this
// just using getPointer?
for (; NumElts; --NumElts)
Vals.push_back(Read(8));
}
// Skip over tail padding.
NextChar = NewEnd;
JumpToBit(NewEnd);
}

unsigned Code = (unsigned)Vals[0];
Expand Down

0 comments on commit 47543a8

Please sign in to comment.