LLVM  14.0.0git
Classes | Public Types | Public Member Functions | Static Public Attributes | List of all members
llvm::BitstreamCursor Class Reference

This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor. More...

#include "llvm/Bitstream/BitstreamReader.h"

Inheritance diagram for llvm::BitstreamCursor:
Inheritance graph
[legend]
Collaboration diagram for llvm::BitstreamCursor:
Collaboration graph
[legend]

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 #. More...
 
Expected< BitstreamEntryadvance (unsigned Flags=0)
 Advance the current bitstream, returning the next entry in the stream. More...
 
Expected< BitstreamEntryadvanceSkippingSubblocks (unsigned Flags=0)
 This is a convenience function for clients that don't expect any subblocks. More...
 
Expected< unsigned > ReadCode ()
 
Expected< unsigned > ReadSubBlockID ()
 Having read the ENTER_SUBBLOCK code, read the BlockID for the block. More...
 
Error SkipBlock ()
 Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body of this block. More...
 
Error EnterSubBlock (unsigned BlockID, unsigned *NumWordsP=nullptr)
 Having read the ENTER_SUBBLOCK abbrevid, and enter the block. More...
 
bool ReadBlockEnd ()
 
const BitCodeAbbrevgetAbbrev (unsigned AbbrevID)
 Return the abbreviation for the specified AbbrevId. More...
 
Expected< unsigned > skipRecord (unsigned AbbrevID)
 Read the current record and discard it, returning the code for the record. More...
 
Expected< unsigned > readRecord (unsigned AbbrevID, SmallVectorImpl< uint64_t > &Vals, StringRef *Blob=nullptr)
 
Error ReadAbbrevRecord ()
 
Expected< Optional< BitstreamBlockInfo > > ReadBlockInfoBlock (bool ReadBlockInfoNames=false)
 Read and return a block info block from the bitstream. More...
 
void setBlockInfo (BitstreamBlockInfo *BI)
 Set the block info to be used by this BitstreamCursor to interpret abbreviated records. More...
 
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. More...
 
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. More...
 
Error JumpToBit (uint64_t BitNo)
 Reset the stream to the specified bit number. More...
 
Expected< word_tRead (unsigned NumBits)
 
Expected< uint32_tReadVBR (unsigned NumBits)
 
Expected< uint64_tReadVBR64 (unsigned NumBits)
 
size_t SizeInBytes () const
 Return the size of the stream in bytes. More...
 
void skipToEnd ()
 Skip to the end of the file. More...
 

Static Public Attributes

static const size_t MaxChunkSize = sizeof(word_t) * 8
 

Detailed Description

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 340 of file BitstreamReader.h.

Member Enumeration Documentation

◆ anonymous enum

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 389 of file BitstreamReader.h.

Constructor & Destructor Documentation

◆ BitstreamCursor() [1/4]

llvm::BitstreamCursor::BitstreamCursor ( )
default

◆ BitstreamCursor() [2/4]

llvm::BitstreamCursor::BitstreamCursor ( ArrayRef< uint8_t >  BitcodeBytes)
inlineexplicit

Definition at line 364 of file BitstreamReader.h.

◆ BitstreamCursor() [3/4]

llvm::BitstreamCursor::BitstreamCursor ( StringRef  BitcodeBytes)
inlineexplicit

Definition at line 366 of file BitstreamReader.h.

◆ BitstreamCursor() [4/4]

llvm::BitstreamCursor::BitstreamCursor ( MemoryBufferRef  BitcodeBytes)
inlineexplicit

Definition at line 368 of file BitstreamReader.h.

Member Function Documentation

◆ advance()

Expected<BitstreamEntry> llvm::BitstreamCursor::advance ( unsigned  Flags = 0)
inline

◆ advanceSkippingSubblocks()

Expected<BitstreamEntry> llvm::BitstreamCursor::advanceSkippingSubblocks ( unsigned  Flags = 0)
inline

This is a convenience function for clients that don't expect any subblocks.

This just skips over them automatically.

Definition at line 439 of file BitstreamReader.h.

References advance().

◆ AtEndOfStream()

bool llvm::SimpleBitstreamCursor::AtEndOfStream
inline

◆ canSkipToPos()

bool llvm::SimpleBitstreamCursor::canSkipToPos
inline

Definition at line 111 of file BitstreamReader.h.

Referenced by hasInvalidBitcodeHeader().

◆ EnterSubBlock()

Error BitstreamCursor::EnterSubBlock ( unsigned  BlockID,
unsigned *  NumWordsP = nullptr 
)

◆ fillCurWord()

Error llvm::SimpleBitstreamCursor::fillCurWord
inline

Definition at line 164 of file BitstreamReader.h.

◆ getAbbrev()

const BitCodeAbbrev* llvm::BitstreamCursor::getAbbrev ( unsigned  AbbrevID)
inline

Return the abbreviation for the specified AbbrevId.

Definition at line 525 of file BitstreamReader.h.

References llvm::bitc::FIRST_APPLICATION_ABBREV, and llvm::report_fatal_error().

Referenced by readRecord(), and skipRecord().

◆ getAbbrevIDWidth()

unsigned llvm::BitstreamCursor::getAbbrevIDWidth ( ) const
inline

Return the number of bits used to encode an abbrev #.

Definition at line 386 of file BitstreamReader.h.

◆ getBitcodeBytes()

ArrayRef<uint8_t> llvm::SimpleBitstreamCursor::getBitcodeBytes
inline

◆ GetCurrentBitNo()

uint64_t llvm::SimpleBitstreamCursor::GetCurrentBitNo
inline

Return the bit # of the bit we are reading.

Definition at line 121 of file BitstreamReader.h.

Referenced by isBlock(), jumpToValueSymbolTable(), and llvm::MetadataLoader::MetadataLoaderImpl::parseMetadata().

◆ getCurrentByteNo()

uint64_t llvm::SimpleBitstreamCursor::getCurrentByteNo
inline

Definition at line 126 of file BitstreamReader.h.

Referenced by llvm::getBitcodeFileContents().

◆ getPointerToByte()

const uint8_t* llvm::SimpleBitstreamCursor::getPointerToByte
inline

Get a pointer into the bitstream at the specified byte offset.

Definition at line 152 of file BitstreamReader.h.

◆ JumpToBit()

Error llvm::SimpleBitstreamCursor::JumpToBit
inline

Reset the stream to the specified bit number.

Definition at line 131 of file BitstreamReader.h.

Referenced by llvm::BitcodeModule::getLTOInfo(), llvm::BitcodeModule::getSummary(), isBlock(), jumpToValueSymbolTable(), and llvm::BitcodeModule::readSummary().

◆ Read()

Expected<word_t> llvm::SimpleBitstreamCursor::Read
inline

◆ ReadAbbrevRecord()

Error BitstreamCursor::ReadAbbrevRecord ( )

◆ ReadBlockEnd()

bool llvm::BitstreamCursor::ReadBlockEnd ( )
inline

Definition at line 500 of file BitstreamReader.h.

References llvm::SimpleBitstreamCursor::SkipToFourByteBoundary().

Referenced by advance().

◆ ReadBlockInfoBlock()

Expected< Optional< BitstreamBlockInfo > > BitstreamCursor::ReadBlockInfoBlock ( bool  ReadBlockInfoNames = false)

Read and return a block info block from the bitstream.

If an error was encountered, return None.

Parameters
ReadBlockInfoNamesWhether to read block/record name information in the BlockInfo block. Only llvm-bcanalyzer uses this.

Definition at line 404 of file BitstreamReader.cpp.

Referenced by llvm::BitcodeAnalyzer::analyze(), and llvm::remarks::BitstreamParserHelper::parseBlockInfoBlock().

◆ ReadCode()

Expected<unsigned> llvm::BitstreamCursor::ReadCode ( )
inline

Definition at line 456 of file BitstreamReader.h.

References llvm::SimpleBitstreamCursor::Read().

Referenced by advance(), and llvm::BitcodeAnalyzer::analyze().

◆ readRecord()

Expected< unsigned > BitstreamCursor::readRecord ( unsigned  AbbrevID,
SmallVectorImpl< uint64_t > &  Vals,
StringRef Blob = nullptr 
)

◆ ReadSubBlockID()

Expected<unsigned> llvm::BitstreamCursor::ReadSubBlockID ( )
inline

Having read the ENTER_SUBBLOCK code, read the BlockID for the block.

Definition at line 462 of file BitstreamReader.h.

References llvm::bitc::BlockIDWidth, and llvm::SimpleBitstreamCursor::ReadVBR().

Referenced by advance(), and llvm::BitcodeAnalyzer::analyze().

◆ ReadVBR()

Expected<uint32_t> llvm::SimpleBitstreamCursor::ReadVBR
inline

Definition at line 233 of file BitstreamReader.h.

◆ ReadVBR64()

Expected<uint64_t> llvm::SimpleBitstreamCursor::ReadVBR64
inline

Definition at line 260 of file BitstreamReader.h.

Referenced by readAbbreviatedField().

◆ setBlockInfo()

void llvm::BitstreamCursor::setBlockInfo ( BitstreamBlockInfo BI)
inline

Set the block info to be used by this BitstreamCursor to interpret abbreviated records.

Definition at line 554 of file BitstreamReader.h.

Referenced by llvm::BitcodeAnalyzer::analyze(), and llvm::remarks::BitstreamParserHelper::parseBlockInfoBlock().

◆ SizeInBytes()

size_t llvm::SimpleBitstreamCursor::SizeInBytes
inline

Return the size of the stream in bytes.

Definition at line 299 of file BitstreamReader.h.

◆ SkipBlock()

Error llvm::BitstreamCursor::SkipBlock ( )
inline

◆ skipRecord()

Expected< unsigned > BitstreamCursor::skipRecord ( unsigned  AbbrevID)

◆ skipToEnd()

void llvm::SimpleBitstreamCursor::skipToEnd
inline

Skip to the end of the file.

Definition at line 302 of file BitstreamReader.h.

Referenced by llvm::remarks::BitstreamParserHelper::skipToEnd().

Member Data Documentation

◆ MaxChunkSize

const size_t llvm::BitstreamCursor::MaxChunkSize = sizeof(word_t) * 8
static

The documentation for this class was generated from the following files: