21 BitStream = RHS.BitStream;
22 NextChar = RHS.NextChar;
23 CurWord = RHS.CurWord;
24 BitsInCurWord = RHS.BitsInCurWord;
25 CurCodeSize = RHS.CurCodeSize;
28 CurAbbrevs = RHS.CurAbbrevs;
29 for (
size_t i = 0, e = CurAbbrevs.size(); i != e; ++i)
30 CurAbbrevs[i]->addRef();
33 BlockScope = RHS.BlockScope;
34 for (
size_t S = 0, e = BlockScope.
size(); S != e; ++S) {
35 std::vector<BitCodeAbbrev*> &Abbrevs = BlockScope[S].PrevAbbrevs;
36 for (
size_t i = 0, e = Abbrevs.size(); i != e; ++i)
43 for (
size_t i = 0, e = CurAbbrevs.size(); i != e; ++i)
44 CurAbbrevs[i]->dropRef();
48 for (
size_t S = 0, e = BlockScope.
size(); S != e; ++S) {
49 std::vector<BitCodeAbbrev*> &Abbrevs = BlockScope[S].PrevAbbrevs;
50 for (
size_t i = 0, e = Abbrevs.size(); i != e; ++i)
51 Abbrevs[i]->dropRef();
61 BlockScope.
back().PrevAbbrevs.swap(CurAbbrevs);
66 for (
size_t i = 0, e = Info->Abbrevs.size(); i != e; ++i) {
67 CurAbbrevs.push_back(Info->Abbrevs[i]);
68 CurAbbrevs.back()->addRef();
74 SkipToFourByteBoundary();
76 if (NumWordsP) *NumWordsP = NumWords;
87 assert(Op.
isLiteral() &&
"Not a literal");
94 assert(!Op.
isLiteral() &&
"Use ReadAbbreviatedLiteral for literals!");
100 assert(0 &&
"Should not reach here");
113 void BitstreamCursor::skipAbbreviatedField(
const BitCodeAbbrevOp &Op) {
114 assert(!Op.
isLiteral() &&
"Use ReadAbbreviatedLiteral for literals!");
120 assert(0 &&
"Should not reach here");
142 for (
unsigned i = 0; i != NumElts; ++i)
156 skipAbbreviatedField(Op);
165 assert(i+2 == e &&
"array op not second to last?");
169 for (; NumElts; --NumElts)
170 skipAbbreviatedField(EltEnc);
177 SkipToFourByteBoundary();
200 for (
unsigned i = 0; i != NumElts; ++i)
210 if (CodeOp.isLiteral())
211 readAbbreviatedLiteral(CodeOp, Vals);
213 readAbbreviatedField(CodeOp, Vals);
219 readAbbreviatedLiteral(Op, Vals);
225 readAbbreviatedField(Op, Vals);
234 assert(i+2 == e &&
"array op not second to last?");
238 for (; NumElts; --NumElts)
239 readAbbreviatedField(EltEnc, Vals);
246 SkipToFourByteBoundary();
250 size_t NewEnd = CurBitPos+((NumElts+3)&~3)*8;
261 const char *Ptr = (
const char*)
269 for (; NumElts; --NumElts)
282 unsigned NumOpInfo =
ReadVBR(5);
283 for (
unsigned i = 0; i != NumOpInfo; ++i) {
284 bool IsLiteral =
Read(1) ?
true :
false;
307 CurAbbrevs.push_back(Abbv);
324 switch (Entry.
Kind) {
337 if (!CurBlockInfo)
return true;
343 CurAbbrevs.pop_back();
344 CurBlockInfo->
Abbrevs.push_back(Abbv);
353 if (Record.
size() < 1)
return true;
357 if (!CurBlockInfo)
return true;
360 for (
unsigned i = 0, e = Record.size(); i != e; ++i)
361 Name += (
char)Record[i];
366 if (!CurBlockInfo)
return true;
369 for (
unsigned i = 1, e = Record.size(); i != e; ++i)
370 Name += (
char)Record[i];
371 CurBlockInfo->
RecordNames.push_back(std::make_pair((
unsigned)Record[0],
void push_back(const T &Elt)
virtual const uint8_t * getPointer(uint64_t address, uint64_t size) const =0
const BitCodeAbbrev * getAbbrev(unsigned AbbrevID)
getAbbrev - Return the abbreviation for the specified AbbrevId.
bool EnterSubBlock(unsigned BlockID, unsigned *NumWordsP=0)
const BitCodeAbbrevOp & getOperandInfo(unsigned N) const
bool hasBlockInfoRecords() const
void Add(const BitCodeAbbrevOp &OpInfo)
StreamableMemoryObject & getBitcodeBytes()
unsigned readRecord(unsigned AbbrevID, SmallVectorImpl< uint64_t > &Vals, StringRef *Blob=0)
uint64_t GetCurrentBitNo() const
GetCurrentBitNo - Return the bit # of the bit we are reading.
bool canSkipToPos(size_t pos) const
const BlockInfo * getBlockInfo(unsigned BlockID) const
T LLVM_ATTRIBUTE_UNUSED_RESULT pop_back_val()
std::vector< std::pair< unsigned, std::string > > RecordNames
virtual uint64_t getExtent() const LLVM_OVERRIDE=0
uint64_t getEncodingData() const
BlockInfo & getOrCreateBlockInfo(unsigned BlockID)
void operator=(const BitstreamCursor &RHS)
BitstreamEntry advanceSkippingSubblocks(unsigned Flags=0)
bool hasEncodingData() const
uint64_t ReadVBR64(unsigned NumBits)
std::vector< BitCodeAbbrev * > Abbrevs
void append(in_iter in_start, in_iter in_end)
uint64_t getLiteralValue() const
uint32_t ReadVBR(unsigned NumBits)
void skipRecord(unsigned AbbrevID)
skipRecord - Read the current record and discard it.
bool isIgnoringBlockInfoNames()
uint32_t Read(unsigned NumBits)
static char DecodeChar6(unsigned V)
unsigned getNumOperandInfos() const
void JumpToBit(uint64_t BitNo)
JumpToBit - Reset the stream to the specified bit number.
Encoding getEncoding() const
enum llvm::BitstreamEntry::@27 Kind
bool ReadBlockInfoBlock()