LLVM 20.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 357 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 406 of file BitstreamReader.h.
|
default |
|
inlineexplicit |
Definition at line 381 of file BitstreamReader.h.
|
inlineexplicit |
Definition at line 383 of file BitstreamReader.h.
|
inlineexplicit |
Definition at line 385 of file BitstreamReader.h.
|
inline |
Advance the current bitstream, returning the next entry in the stream.
Definition at line 417 of file BitstreamReader.h.
References AF_DontAutoprocessAbbrevs, AF_DontPopBlockAtEnd, AtEndOfStream(), llvm::bitc::DEFINE_ABBREV, llvm::bitc::END_BLOCK, llvm::bitc::ENTER_SUBBLOCK, 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 456 of file BitstreamReader.h.
References advance(), llvm::Expected< T >::get(), SkipBlock(), and llvm::BitstreamEntry::SubBlock.
Referenced by getEnableSplitLTOUnitAndUnifiedFlag(), 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 getEnableSplitLTOUnitAndUnifiedFlag(), 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 542 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 403 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 185 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, 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 517 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 473 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 getEnableSplitLTOUnitAndUnifiedFlag(), hasObjCCategoryInModule(), parseRecord(), readBlobInRecord(), ReadBlockInfoBlock(), readIdentificationBlock(), and readModuleTriple().
Having read the ENTER_SUBBLOCK code, read the BlockID for the block.
Definition at line 479 of file BitstreamReader.h.
References llvm::bitc::BlockIDWidth, and ReadVBR().
Referenced by advance(), and llvm::BitcodeAnalyzer::analyze().
Definition at line 228 of file BitstreamReader.h.
Referenced by EnterSubBlock(), ReadAbbrevRecord(), readRecord(), ReadSubBlockID(), SkipBlock(), and skipRecord().
Definition at line 263 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 572 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 309 of file BitstreamReader.h.
|
inline |
Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body of this block.
Definition at line 483 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 312 of file BitstreamReader.h.
Referenced by skipRecord(), and llvm::remarks::BitstreamParserHelper::skipToEnd().
|
static |
Definition at line 378 of file BitstreamReader.h.
Referenced by EnterSubBlock(), readAbbreviatedField(), ReadAbbrevRecord(), and skipRecord().