LLVM 17.0.0git
|
This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor. More...
#include "llvm/Bitstream/BitstreamReader.h"
Public Types | |
enum | { AF_DontPopBlockAtEnd = 1 , AF_DontAutoprocessAbbrevs = 2 } |
Flags that modify the behavior of advance(). More... | |
Public Member Functions | |
BitstreamCursor ()=default | |
BitstreamCursor (ArrayRef< uint8_t > BitcodeBytes) | |
BitstreamCursor (StringRef BitcodeBytes) | |
BitstreamCursor (MemoryBufferRef BitcodeBytes) | |
unsigned | getAbbrevIDWidth () const |
Return the number of bits used to encode an abbrev #. | |
Expected< BitstreamEntry > | advance (unsigned Flags=0) |
Advance the current bitstream, returning the next entry in the stream. | |
Expected< BitstreamEntry > | advanceSkippingSubblocks (unsigned Flags=0) |
This is a convenience function for clients that don't expect any subblocks. | |
Expected< unsigned > | ReadCode () |
Expected< unsigned > | ReadSubBlockID () |
Having read the ENTER_SUBBLOCK code, read the BlockID for the block. | |
Error | SkipBlock () |
Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body of this block. | |
Error | EnterSubBlock (unsigned BlockID, unsigned *NumWordsP=nullptr) |
Having read the ENTER_SUBBLOCK abbrevid, and enter the block. | |
bool | ReadBlockEnd () |
Expected< const BitCodeAbbrev * > | getAbbrev (unsigned AbbrevID) |
Return the abbreviation for the specified AbbrevId. | |
Expected< unsigned > | skipRecord (unsigned AbbrevID) |
Read the current record and discard it, returning the code for the record. | |
Expected< unsigned > | readRecord (unsigned AbbrevID, SmallVectorImpl< uint64_t > &Vals, StringRef *Blob=nullptr) |
Error | ReadAbbrevRecord () |
Expected< std::optional< BitstreamBlockInfo > > | ReadBlockInfoBlock (bool ReadBlockInfoNames=false) |
Read and return a block info block from the bitstream. | |
void | setBlockInfo (BitstreamBlockInfo *BI) |
Set the block info to be used by this BitstreamCursor to interpret abbreviated records. | |
bool | AtEndOfStream () |
bool | canSkipToPos (size_t pos) const |
Error | fillCurWord () |
ArrayRef< uint8_t > | getBitcodeBytes () const |
uint64_t | GetCurrentBitNo () const |
Return the bit # of the bit we are reading. | |
uint64_t | getCurrentByteNo () const |
const uint8_t * | getPointerToByte (uint64_t ByteNo, uint64_t NumBytes) |
Get a pointer into the bitstream at the specified byte offset. | |
Error | JumpToBit (uint64_t BitNo) |
Reset the stream to the specified bit number. | |
Expected< word_t > | Read (unsigned NumBits) |
Expected< uint32_t > | ReadVBR (const unsigned NumBits) |
Expected< uint64_t > | ReadVBR64 (const unsigned NumBits) |
size_t | SizeInBytes () const |
Return the size of the stream in bytes. | |
void | skipToEnd () |
Skip to the end of the file. | |
Static Public Attributes | |
static const size_t | MaxChunkSize = 32 |
This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor.
Unlike iterators, BitstreamCursors are heavy-weight objects that should not be passed by value.
Definition at line 358 of file BitstreamReader.h.
anonymous enum |
Flags that modify the behavior of advance().
Enumerator | |
---|---|
AF_DontPopBlockAtEnd | If this flag is used, the advance() method does not automatically pop the block scope when the end of a block is reached. |
AF_DontAutoprocessAbbrevs | If this flag is used, abbrev entries are returned just like normal records. |
Definition at line 407 of file BitstreamReader.h.
|
default |
|
inlineexplicit |
Definition at line 382 of file BitstreamReader.h.
|
inlineexplicit |
Definition at line 384 of file BitstreamReader.h.
|
inlineexplicit |
Definition at line 386 of file BitstreamReader.h.
|
inline |
Advance the current bitstream, returning the next entry in the stream.
Definition at line 418 of file BitstreamReader.h.
References AF_DontAutoprocessAbbrevs, AF_DontPopBlockAtEnd, AtEndOfStream(), llvm::bitc::DEFINE_ABBREV, llvm::bitc::END_BLOCK, llvm::bitc::ENTER_SUBBLOCK, Flags, llvm::Expected< T >::get(), llvm::BitstreamEntry::getEndBlock(), llvm::BitstreamEntry::getError(), llvm::BitstreamEntry::getRecord(), llvm::BitstreamEntry::getSubBlock(), ReadAbbrevRecord(), ReadBlockEnd(), ReadCode(), ReadSubBlockID(), and llvm::Expected< T >::takeError().
Referenced by advanceSkippingSubblocks(), llvm::getBitcodeFileContents(), llvm::BitcodeModule::getLTOInfo(), hasObjCCategory(), isBlock(), jumpToValueSymbolTable(), parseBlock(), llvm::remarks::BitstreamParserHelper::parseBlockInfoBlock(), readBlobInRecord(), readIdentificationBlock(), readIdentificationCode(), and readTriple().
|
inline |
This is a convenience function for clients that don't expect any subblocks.
This just skips over them automatically.
Definition at line 457 of file BitstreamReader.h.
References advance(), Flags, llvm::Expected< T >::get(), SkipBlock(), and llvm::BitstreamEntry::SubBlock.
Referenced by getEnableSplitLTOUnitFlag(), hasObjCCategoryInModule(), ReadBlockInfoBlock(), and readModuleTriple().
|
inline |
Definition at line 112 of file BitstreamReader.h.
Referenced by advance(), llvm::BitcodeAnalyzer::analyze(), llvm::remarks::BitstreamParserHelper::atEndOfStream(), EnterSubBlock(), parseBlock(), readIdentificationCode(), and SkipBlock().
|
inline |
Definition at line 107 of file BitstreamReader.h.
Referenced by hasInvalidBitcodeHeader(), readRecord(), SkipBlock(), and skipRecord().
Having read the ENTER_SUBBLOCK abbrevid, and enter the block.
Having read the ENTER_SUBBLOCK abbrevid, enter the block.
Definition at line 26 of file BitstreamReader.cpp.
References llvm::append_range(), AtEndOfStream(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::bitc::BlockSizeWidth, llvm::bitc::CodeLenWidth, llvm::createStringError(), llvm::Expected< T >::get(), llvm::BitstreamBlockInfo::getBlockInfo(), Info, MaxChunkSize, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Read(), ReadVBR(), llvm::SimpleBitstreamCursor::SkipToFourByteBoundary(), llvm::Error::success(), and llvm::Expected< T >::takeError().
Referenced by getEnableSplitLTOUnitFlag(), llvm::BitcodeModule::getLTOInfo(), hasObjCCategoryInModule(), parseBlock(), readBlobInRecord(), ReadBlockInfoBlock(), readIdentificationBlock(), and readModuleTriple().
|
inline |
Definition at line 160 of file BitstreamReader.h.
|
inline |
Return the abbreviation for the specified AbbrevId.
Definition at line 543 of file BitstreamReader.h.
References llvm::createStringError(), and llvm::bitc::FIRST_APPLICATION_ABBREV.
Referenced by readRecord(), and skipRecord().
|
inline |
Return the number of bits used to encode an abbrev #.
Definition at line 404 of file BitstreamReader.h.
|
inline |
Definition at line 124 of file BitstreamReader.h.
Referenced by analyzeHeader(), llvm::getBitcodeFileContents(), and llvm::BitcodeAnalyzer::printStats().
|
inline |
Return the bit # of the bit we are reading.
Definition at line 117 of file BitstreamReader.h.
Referenced by llvm::getBitcodeFileContents(), isBlock(), jumpToValueSymbolTable(), readRecord(), SkipBlock(), and skipRecord().
|
inline |
Definition at line 122 of file BitstreamReader.h.
Referenced by llvm::getBitcodeFileContents().
|
inline |
Get a pointer into the bitstream at the specified byte offset.
Definition at line 148 of file BitstreamReader.h.
Reset the stream to the specified bit number.
Definition at line 127 of file BitstreamReader.h.
Referenced by llvm::BitcodeModule::getLTOInfo(), llvm::BitcodeModule::getSummary(), isBlock(), jumpToValueSymbolTable(), readRecord(), llvm::BitcodeModule::readSummary(), SkipBlock(), and skipRecord().
Definition at line 186 of file BitstreamReader.h.
Referenced by EnterSubBlock(), hasInvalidBitcodeHeader(), llvm::remarks::BitstreamParserHelper::parseMagic(), readAbbreviatedField(), ReadAbbrevRecord(), ReadCode(), readRecord(), ReadSignature(), and SkipBlock().
Error BitstreamCursor::ReadAbbrevRecord | ( | ) |
Definition at line 363 of file BitstreamReader.cpp.
References llvm::Data, E, error, llvm::BitCodeAbbrevOp::Fixed, llvm::Expected< T >::get(), llvm::BitCodeAbbrevOp::hasEncodingData(), llvm::BitCodeAbbrevOp::isValidEncoding(), MaxChunkSize, Read(), ReadVBR(), ReadVBR64(), llvm::Error::success(), llvm::Expected< T >::takeError(), and llvm::BitCodeAbbrevOp::VBR.
Referenced by advance(), and ReadBlockInfoBlock().
|
inline |
Definition at line 518 of file BitstreamReader.h.
References llvm::SmallVectorBase< Size_T >::empty(), and llvm::SimpleBitstreamCursor::SkipToFourByteBoundary().
Referenced by advance().
Expected< std::optional< BitstreamBlockInfo > > BitstreamCursor::ReadBlockInfoBlock | ( | bool | ReadBlockInfoNames = false | ) |
Read and return a block info block from the bitstream.
If an error was encountered, return std::nullopt.
ReadBlockInfoNames | Whether to read block/record name information in the BlockInfo block. Only llvm-bcanalyzer uses this. |
Definition at line 422 of file BitstreamReader.cpp.
References llvm::BitstreamBlockInfo::BlockInfo::Abbrevs, advanceSkippingSubblocks(), AF_DontAutoprocessAbbrevs, llvm::bitc::BLOCKINFO_BLOCK_ID, llvm::bitc::BLOCKINFO_CODE_BLOCKNAME, llvm::bitc::BLOCKINFO_CODE_SETBID, llvm::bitc::BLOCKINFO_CODE_SETRECORDNAME, llvm::bitc::DEFINE_ABBREV, llvm::BitstreamEntry::EndBlock, EnterSubBlock(), llvm::BitstreamEntry::Error, llvm::Expected< T >::get(), llvm::BitstreamBlockInfo::getOrCreateBlockInfo(), llvm::BitstreamBlockInfo::BlockInfo::Name, ReadAbbrevRecord(), readRecord(), llvm::BitstreamEntry::Record, llvm::BitstreamBlockInfo::BlockInfo::RecordNames, llvm::BitstreamEntry::SubBlock, and llvm::Expected< T >::takeError().
Referenced by llvm::BitcodeAnalyzer::analyze(), and llvm::remarks::BitstreamParserHelper::parseBlockInfoBlock().
Definition at line 474 of file BitstreamReader.h.
References Read().
Referenced by advance(), and llvm::BitcodeAnalyzer::analyze().
Expected< unsigned > BitstreamCursor::readRecord | ( | unsigned | AbbrevID, |
SmallVectorImpl< uint64_t > & | Vals, | ||
StringRef * | Blob = nullptr |
||
) |
Definition at line 214 of file BitstreamReader.cpp.
References llvm::alignTo(), llvm::SmallVectorImpl< T >::append(), llvm::BitCodeAbbrevOp::Array, assert(), llvm::BitCodeAbbrevOp::Blob, canSkipToPos(), llvm::BitCodeAbbrevOp::Char6, llvm::BitCodeAbbrevOp::DecodeChar6(), error, llvm::BitCodeAbbrevOp::Fixed, llvm::Expected< T >::get(), getAbbrev(), GetCurrentBitNo(), llvm::BitCodeAbbrevOp::getEncoding(), llvm::BitCodeAbbrevOp::getEncodingData(), llvm::BitCodeAbbrevOp::getLiteralValue(), llvm::BitCodeAbbrev::getNumOperandInfos(), llvm::BitCodeAbbrev::getOperandInfo(), llvm::SimpleBitstreamCursor::getPointerToBit(), llvm::BitCodeAbbrevOp::isEncoding(), llvm::BitCodeAbbrevOp::isLiteral(), llvm::SimpleBitstreamCursor::isSizePlausible(), JumpToBit(), Ptr, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Read(), readAbbreviatedField(), ReadVBR(), ReadVBR64(), llvm::SmallVectorImpl< T >::reserve(), llvm::SmallVectorBase< Size_T >::size(), llvm::SimpleBitstreamCursor::SkipToFourByteBoundary(), llvm::Expected< T >::takeError(), llvm::dwarf::toString(), llvm::bitc::UNABBREV_RECORD, and llvm::BitCodeAbbrevOp::VBR.
Referenced by getEnableSplitLTOUnitFlag(), hasObjCCategoryInModule(), parseRecord(), readBlobInRecord(), ReadBlockInfoBlock(), readIdentificationBlock(), and readModuleTriple().
Having read the ENTER_SUBBLOCK code, read the BlockID for the block.
Definition at line 480 of file BitstreamReader.h.
References llvm::bitc::BlockIDWidth, and ReadVBR().
Referenced by advance(), and llvm::BitcodeAnalyzer::analyze().
Definition at line 229 of file BitstreamReader.h.
Referenced by EnterSubBlock(), ReadAbbrevRecord(), readRecord(), ReadSubBlockID(), SkipBlock(), and skipRecord().
Definition at line 264 of file BitstreamReader.h.
Referenced by readAbbreviatedField(), ReadAbbrevRecord(), readRecord(), and skipRecord().
|
inline |
Set the block info to be used by this BitstreamCursor to interpret abbreviated records.
Definition at line 573 of file BitstreamReader.h.
Referenced by llvm::BitcodeAnalyzer::analyze(), and llvm::remarks::BitstreamParserHelper::parseBlockInfoBlock().
|
inline |
Return the size of the stream in bytes.
Definition at line 310 of file BitstreamReader.h.
|
inline |
Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body of this block.
Definition at line 484 of file BitstreamReader.h.
References AtEndOfStream(), llvm::bitc::BlockSizeWidth, canSkipToPos(), llvm::bitc::CodeLenWidth, llvm::createStringError(), llvm::Expected< T >::get(), GetCurrentBitNo(), JumpToBit(), Read(), ReadVBR(), llvm::SimpleBitstreamCursor::SkipToFourByteBoundary(), llvm::Error::success(), and llvm::Expected< T >::takeError().
Referenced by advanceSkippingSubblocks(), llvm::BitcodeAnalyzer::analyze(), llvm::getBitcodeFileContents(), llvm::BitcodeModule::getLTOInfo(), hasObjCCategory(), readBlobInRecord(), readIdentificationCode(), and readTriple().
Read the current record and discard it, returning the code for the record.
skipRecord - Read the current record and discard it.
Definition at line 96 of file BitstreamReader.cpp.
References llvm::alignTo(), llvm::BitCodeAbbrevOp::Array, assert(), llvm::BitCodeAbbrevOp::Blob, canSkipToPos(), llvm::BitCodeAbbrevOp::Char6, llvm::createStringError(), error, llvm::BitCodeAbbrevOp::Fixed, llvm::Expected< T >::get(), getAbbrev(), GetCurrentBitNo(), llvm::BitCodeAbbrevOp::getEncoding(), llvm::BitCodeAbbrevOp::getEncodingData(), llvm::BitCodeAbbrevOp::getLiteralValue(), llvm::BitCodeAbbrev::getNumOperandInfos(), llvm::BitCodeAbbrev::getOperandInfo(), llvm::BitCodeAbbrevOp::isLiteral(), JumpToBit(), MaxChunkSize, readAbbreviatedField(), ReadVBR(), ReadVBR64(), skipToEnd(), llvm::SimpleBitstreamCursor::SkipToFourByteBoundary(), llvm::Expected< T >::takeError(), llvm::bitc::UNABBREV_RECORD, and llvm::BitCodeAbbrevOp::VBR.
Referenced by llvm::getBitcodeFileContents(), llvm::BitcodeModule::getLTOInfo(), hasObjCCategory(), readIdentificationCode(), and readTriple().
|
inline |
Skip to the end of the file.
Definition at line 313 of file BitstreamReader.h.
Referenced by skipRecord(), and llvm::remarks::BitstreamParserHelper::skipToEnd().
|
static |
Definition at line 379 of file BitstreamReader.h.
Referenced by EnterSubBlock(), readAbbreviatedField(), ReadAbbrevRecord(), and skipRecord().