LLVM 19.0.0git
Classes | Public Member Functions | List of all members
llvm::BitstreamWriter Class Reference

#include "llvm/Bitstream/BitstreamWriter.h"

Public Member Functions

 BitstreamWriter (SmallVectorImpl< char > &O, raw_fd_stream *FS=nullptr, uint32_t FlushThreshold=512)
 Create a BitstreamWriter that writes to Buffer O.
 
 ~BitstreamWriter ()
 
uint64_t GetCurrentBitNo () const
 Retrieve the current position in the stream, in bits.
 
unsigned GetAbbrevIDWidth () const
 Retrieve the number of bits currently used to encode an abbrev ID.
 
void BackpatchByte (uint64_t BitNo, uint8_t NewByte)
 Backpatch a byte in the output at the given bit offset with the specified value.
 
void BackpatchHalfWord (uint64_t BitNo, uint16_t Val)
 
void BackpatchWord (uint64_t BitNo, unsigned Val)
 
void BackpatchWord64 (uint64_t BitNo, uint64_t Val)
 
void Emit (uint32_t Val, unsigned NumBits)
 
void FlushToWord ()
 
void EmitVBR (uint32_t Val, unsigned NumBits)
 
void EmitVBR64 (uint64_t Val, unsigned NumBits)
 
void EmitCode (unsigned Val)
 EmitCode - Emit the specified code.
 
BlockInfo * getBlockInfo (unsigned BlockID)
 getBlockInfo - If there is block info for the specified ID, return it, otherwise return null.
 
void EnterSubblock (unsigned BlockID, unsigned CodeLen)
 
void ExitBlock ()
 
template<class UIntTy >
void emitBlob (ArrayRef< UIntTy > Bytes, bool ShouldEmitSize=true)
 Emit a blob, including flushing before and tail-padding.
 
void emitBlob (StringRef Bytes, bool ShouldEmitSize=true)
 
template<typename Container >
void EmitRecord (unsigned Code, const Container &Vals, unsigned Abbrev=0)
 EmitRecord - Emit the specified record to the stream, using an abbrev if we have one to compress the output.
 
template<typename Container >
void EmitRecordWithAbbrev (unsigned Abbrev, const Container &Vals)
 EmitRecordWithAbbrev - Emit a record with the specified abbreviation.
 
template<typename Container >
void EmitRecordWithBlob (unsigned Abbrev, const Container &Vals, StringRef Blob)
 EmitRecordWithBlob - Emit the specified record to the stream, using an abbrev that includes a blob at the end.
 
template<typename Container >
void EmitRecordWithBlob (unsigned Abbrev, const Container &Vals, const char *BlobData, unsigned BlobLen)
 
template<typename Container >
void EmitRecordWithArray (unsigned Abbrev, const Container &Vals, StringRef Array)
 EmitRecordWithArray - Just like EmitRecordWithBlob, works with records that end with an array.
 
template<typename Container >
void EmitRecordWithArray (unsigned Abbrev, const Container &Vals, const char *ArrayData, unsigned ArrayLen)
 
unsigned EmitAbbrev (std::shared_ptr< BitCodeAbbrev > Abbv)
 Emits the abbreviation Abbv to the stream.
 
void EnterBlockInfoBlock ()
 EnterBlockInfoBlock - Start emitting the BLOCKINFO_BLOCK.
 
unsigned EmitBlockInfoAbbrev (unsigned BlockID, std::shared_ptr< BitCodeAbbrev > Abbv)
 EmitBlockInfoAbbrev - Emit a DEFINE_ABBREV record for the specified BlockID.
 

Detailed Description

Definition at line 30 of file BitstreamWriter.h.

Constructor & Destructor Documentation

◆ BitstreamWriter()

llvm::BitstreamWriter::BitstreamWriter ( SmallVectorImpl< char > &  O,
raw_fd_stream FS = nullptr,
uint32_t  FlushThreshold = 512 
)
inline

Create a BitstreamWriter that writes to Buffer O.

FS is the file stream that O flushes to incrementally. If FS is null, O does not flush incrementially, but writes to disk at the end.

FlushThreshold is the threshold (unit M) to flush O if FS is valid. Flushing only occurs at (sub)block boundaries.

Definition at line 113 of file BitstreamWriter.h.

◆ ~BitstreamWriter()

llvm::BitstreamWriter::~BitstreamWriter ( )
inline

Definition at line 118 of file BitstreamWriter.h.

References assert().

Member Function Documentation

◆ BackpatchByte()

void llvm::BitstreamWriter::BackpatchByte ( uint64_t  BitNo,
uint8_t  NewByte 
)
inline

Backpatch a byte in the output at the given bit offset with the specified value.

Definition at line 135 of file BitstreamWriter.h.

References assert(), llvm::little, and llvm::support::endian::readAtBitAlignment().

Referenced by BackpatchHalfWord().

◆ BackpatchHalfWord()

void llvm::BitstreamWriter::BackpatchHalfWord ( uint64_t  BitNo,
uint16_t  Val 
)
inline

Definition at line 194 of file BitstreamWriter.h.

References BackpatchByte().

Referenced by BackpatchWord().

◆ BackpatchWord()

void llvm::BitstreamWriter::BackpatchWord ( uint64_t  BitNo,
unsigned  Val 
)
inline

Definition at line 199 of file BitstreamWriter.h.

References BackpatchHalfWord().

Referenced by BackpatchWord64(), and ExitBlock().

◆ BackpatchWord64()

void llvm::BitstreamWriter::BackpatchWord64 ( uint64_t  BitNo,
uint64_t  Val 
)
inline

Definition at line 204 of file BitstreamWriter.h.

References BackpatchWord().

◆ Emit()

void llvm::BitstreamWriter::Emit ( uint32_t  Val,
unsigned  NumBits 
)
inline

◆ EmitAbbrev()

unsigned llvm::BitstreamWriter::EmitAbbrev ( std::shared_ptr< BitCodeAbbrev Abbv)
inline

Emits the abbreviation Abbv to the stream.

Definition at line 578 of file BitstreamWriter.h.

References llvm::bitc::FIRST_APPLICATION_ABBREV.

Referenced by llvm::BCGenericRecordLayout< IDField, Fields >::emitAbbrev(), and writeIdentificationBlock().

◆ emitBlob() [1/2]

template<class UIntTy >
void llvm::BitstreamWriter::emitBlob ( ArrayRef< UIntTy >  Bytes,
bool  ShouldEmitSize = true 
)
inline

◆ emitBlob() [2/2]

void llvm::BitstreamWriter::emitBlob ( StringRef  Bytes,
bool  ShouldEmitSize = true 
)
inline

Definition at line 490 of file BitstreamWriter.h.

References llvm::StringRef::data(), emitBlob(), and llvm::StringRef::size().

◆ EmitBlockInfoAbbrev()

unsigned llvm::BitstreamWriter::EmitBlockInfoAbbrev ( unsigned  BlockID,
std::shared_ptr< BitCodeAbbrev Abbv 
)
inline

◆ EmitCode()

void llvm::BitstreamWriter::EmitCode ( unsigned  Val)
inline

EmitCode - Emit the specified code.

Definition at line 269 of file BitstreamWriter.h.

References Emit.

Referenced by EmitRecord(), EnterSubblock(), and ExitBlock().

◆ EmitRecord()

template<typename Container >
void llvm::BitstreamWriter::EmitRecord ( unsigned  Code,
const Container &  Vals,
unsigned  Abbrev = 0 
)
inline

EmitRecord - Emit the specified record to the stream, using an abbrev if we have one to compress the output.

Definition at line 498 of file BitstreamWriter.h.

References EmitCode(), EmitVBR(), EmitVBR64(), and llvm::bitc::UNABBREV_RECORD.

Referenced by writeFunctionHeapProfileRecords(), writeFunctionTypeMetadataRecords(), writeIdentificationBlock(), writeStringRecord(), and llvm::dxil::DXILBitcodeWriter::writeStringRecord().

◆ EmitRecordWithAbbrev()

template<typename Container >
void llvm::BitstreamWriter::EmitRecordWithAbbrev ( unsigned  Abbrev,
const Container &  Vals 
)
inline

EmitRecordWithAbbrev - Emit a record with the specified abbreviation.

Unlike EmitRecord, the code for the record should be included in Vals as the first entry.

Definition at line 518 of file BitstreamWriter.h.

Referenced by llvm::detail::BCRecordCoding< BCArray< ElementTy > >::emit(), llvm::detail::BCRecordCoding< ElementTy >::emit(), llvm::remarks::BitstreamRemarkSerializerHelper::emitMetaBlock(), llvm::remarks::BitstreamRemarkSerializerHelper::emitMetaRemarkVersion(), and llvm::remarks::BitstreamRemarkSerializerHelper::emitRemarkBlock().

◆ EmitRecordWithArray() [1/2]

template<typename Container >
void llvm::BitstreamWriter::EmitRecordWithArray ( unsigned  Abbrev,
const Container &  Vals,
const char ArrayData,
unsigned  ArrayLen 
)
inline

Definition at line 547 of file BitstreamWriter.h.

◆ EmitRecordWithArray() [2/2]

template<typename Container >
void llvm::BitstreamWriter::EmitRecordWithArray ( unsigned  Abbrev,
const Container &  Vals,
StringRef  Array 
)
inline

EmitRecordWithArray - Just like EmitRecordWithBlob, works with records that end with an array.

Definition at line 542 of file BitstreamWriter.h.

Referenced by llvm::detail::BCRecordCoding< BCArray< ElementTy > >::emit().

◆ EmitRecordWithBlob() [1/2]

template<typename Container >
void llvm::BitstreamWriter::EmitRecordWithBlob ( unsigned  Abbrev,
const Container &  Vals,
const char BlobData,
unsigned  BlobLen 
)
inline

Definition at line 533 of file BitstreamWriter.h.

◆ EmitRecordWithBlob() [2/2]

template<typename Container >
void llvm::BitstreamWriter::EmitRecordWithBlob ( unsigned  Abbrev,
const Container &  Vals,
StringRef  Blob 
)
inline

EmitRecordWithBlob - Emit the specified record to the stream, using an abbrev that includes a blob at the end.

The blob data to emit is specified by the pointer and length specified at the end. In contrast to EmitRecord, this routine expects that the first entry in Vals is the code of the record.

Definition at line 528 of file BitstreamWriter.h.

Referenced by llvm::detail::BCRecordCoding< BCBlob >::emit(), llvm::remarks::BitstreamRemarkSerializerHelper::emitMetaExternalFile(), and llvm::remarks::BitstreamRemarkSerializerHelper::emitMetaStrTab().

◆ EmitVBR()

void llvm::BitstreamWriter::EmitVBR ( uint32_t  Val,
unsigned  NumBits 
)
inline

Definition at line 236 of file BitstreamWriter.h.

References assert(), and Emit.

Referenced by emitBlob(), EmitRecord(), EmitVBR64(), and EnterSubblock().

◆ EmitVBR64()

void llvm::BitstreamWriter::EmitVBR64 ( uint64_t  Val,
unsigned  NumBits 
)
inline

Definition at line 250 of file BitstreamWriter.h.

References assert(), Emit, and EmitVBR().

Referenced by EmitRecord().

◆ EnterBlockInfoBlock()

void llvm::BitstreamWriter::EnterBlockInfoBlock ( )
inline

EnterBlockInfoBlock - Start emitting the BLOCKINFO_BLOCK.

Definition at line 590 of file BitstreamWriter.h.

References llvm::bitc::BLOCKINFO_BLOCK_ID, and EnterSubblock().

Referenced by llvm::remarks::BitstreamRemarkSerializerHelper::setupBlockInfo().

◆ EnterSubblock()

void llvm::BitstreamWriter::EnterSubblock ( unsigned  BlockID,
unsigned  CodeLen 
)
inline

◆ ExitBlock()

void llvm::BitstreamWriter::ExitBlock ( )
inline

◆ FlushToWord()

void llvm::BitstreamWriter::FlushToWord ( )
inline

Definition at line 228 of file BitstreamWriter.h.

Referenced by emitBlob(), EnterSubblock(), and ExitBlock().

◆ GetAbbrevIDWidth()

unsigned llvm::BitstreamWriter::GetAbbrevIDWidth ( ) const
inline

Retrieve the number of bits currently used to encode an abbrev ID.

Definition at line 127 of file BitstreamWriter.h.

◆ getBlockInfo()

BlockInfo * llvm::BitstreamWriter::getBlockInfo ( unsigned  BlockID)
inline

getBlockInfo - If there is block info for the specified ID, return it, otherwise return null.

Definition at line 279 of file BitstreamWriter.h.

Referenced by EnterSubblock().

◆ GetCurrentBitNo()

uint64_t llvm::BitstreamWriter::GetCurrentBitNo ( ) const
inline

Retrieve the current position in the stream, in bits.

Definition at line 124 of file BitstreamWriter.h.


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