LLVM 22.0.0git
llvm::DbgMarker Class Reference

Per-instruction record of debug-info. More...

#include "llvm/IR/DebugProgramInstruction.h"

Public Member Functions

 DbgMarker ()
bool empty () const
LLVM_ABI const BasicBlockgetParent () const
LLVM_ABI BasicBlockgetParent ()
LLVM_ABI void removeMarker ()
 Handle the removal of a marker: the position of debug-info has gone away, but the stored debug records should not.
LLVM_ABI void dump () const
LLVM_ABI void removeFromParent ()
LLVM_ABI void eraseFromParent ()
LLVM_ABI void print (raw_ostream &O, bool IsForDebug=false) const
 Implement operator<< on DbgMarker.
LLVM_ABI void print (raw_ostream &ROS, ModuleSlotTracker &MST, bool IsForDebug) const
LLVM_ABI iterator_range< simple_ilist< DbgRecord >::iterator > getDbgRecordRange ()
 Produce a range over all the DbgRecords in this Marker.
LLVM_ABI iterator_range< simple_ilist< DbgRecord >::const_iteratorgetDbgRecordRange () const
LLVM_ABI void absorbDebugValues (DbgMarker &Src, bool InsertAtHead)
 Transfer any DbgRecords from Src into this DbgMarker.
LLVM_ABI void absorbDebugValues (iterator_range< DbgRecord::self_iterator > Range, DbgMarker &Src, bool InsertAtHead)
 Transfer the DbgRecords in Range from Src into this DbgMarker.
LLVM_ABI void insertDbgRecord (DbgRecord *New, bool InsertAtHead)
 Insert a DbgRecord into this DbgMarker, at the end of the list.
LLVM_ABI void insertDbgRecord (DbgRecord *New, DbgRecord *InsertBefore)
 Insert a DbgRecord prior to a DbgRecord contained within this marker.
LLVM_ABI void insertDbgRecordAfter (DbgRecord *New, DbgRecord *InsertAfter)
 Insert a DbgRecord after a DbgRecord contained within this marker.
LLVM_ABI iterator_range< simple_ilist< DbgRecord >::iterator > cloneDebugInfoFrom (DbgMarker *From, std::optional< simple_ilist< DbgRecord >::iterator > FromHere, bool InsertAtHead=false)
 Clone all DbgMarkers from From into this marker.
LLVM_ABI void dropDbgRecords ()
 Erase all DbgRecords in this DbgMarker.
LLVM_ABI void dropOneDbgRecord (DbgRecord *DR)
 Erase a single DbgRecord from this marker.

Static Public Member Functions

static iterator_range< simple_ilist< DbgRecord >::iterator > getEmptyDbgRecordRange ()

Public Attributes

InstructionMarkedInstr = nullptr
 Link back to the Instruction that owns this marker.
simple_ilist< DbgRecordStoredDbgRecords
 List of DbgRecords, the non-instruction equivalent of llvm.dbg.

Static Public Attributes

static LLVM_ABI DbgMarker EmptyDbgMarker
 We generally act like all llvm Instructions have a range of DbgRecords attached to them, but in reality sometimes we don't allocate the DbgMarker to save time and memory, but still have to return ranges of DbgRecords.

Detailed Description

Per-instruction record of debug-info.

If an Instruction is the position of some debugging information, it points at a DbgMarker storing that info. Each marker points back at the instruction that owns it. Various utilities are provided for manipulating the DbgRecords contained within this marker.

This class has a rough surface area, because it's needed to preserve the one arefact that we can't yet eliminate from the intrinsic / dbg.value debug-info design: the order of records is significant, and duplicates can exist. Thus, if one has a run of debug-info records such as: dbg.value(... foo = barinst dbg.value(... and remove barinst, then the dbg.values must be preserved in the correct order. Hence, the use of iterators to select positions to insert things into, or the occasional InsertAtHead parameter indicating that new records should go at the start of the list.

There are only five or six places in LLVM that truly rely on this ordering, which we can improve in the future. Additionally, many improvements in the way that debug-info is stored can be achieved in this class, at a future date.

Definition at line 590 of file DebugProgramInstruction.h.

Constructor & Destructor Documentation

◆ DbgMarker()

llvm::DbgMarker::DbgMarker ( )
inline

Member Function Documentation

◆ absorbDebugValues() [1/2]

void llvm::DbgMarker::absorbDebugValues ( DbgMarker & Src,
bool InsertAtHead )

Transfer any DbgRecords from Src into this DbgMarker.

If InsertAtHead is true, place them before existing DbgRecords, otherwise afterwards.

Definition at line 703 of file DebugProgramInstruction.cpp.

References DbgMarker(), llvm::DbgRecord::setMarker(), and StoredDbgRecords.

Referenced by removeMarker().

◆ absorbDebugValues() [2/2]

void llvm::DbgMarker::absorbDebugValues ( iterator_range< DbgRecord::self_iterator > Range,
DbgMarker & Src,
bool InsertAtHead )

Transfer the DbgRecords in Range from Src into this DbgMarker.

If InsertAtHead is true, place them before existing DbgRecords, otherwise

Definition at line 711 of file DebugProgramInstruction.cpp.

References DbgMarker(), Range, and StoredDbgRecords.

◆ cloneDebugInfoFrom()

iterator_range< simple_ilist< DbgRecord >::iterator > llvm::DbgMarker::cloneDebugInfoFrom ( DbgMarker * From,
std::optional< simple_ilist< DbgRecord >::iterator > FromHere,
bool InsertAtHead = false )

Clone all DbgMarkers from From into this marker.

There are numerous options to customise the source/destination, due to gnarliness, see class comment. FromHere If non-null, copy from FromHere to the end of From's DbgRecords InsertAtHead Place the cloned DbgRecords at the start of StoredDbgRecords

Returns
Range over all the newly cloned DbgRecords

Definition at line 724 of file DebugProgramInstruction.cpp.

References DbgMarker(), llvm::First, llvm::make_range(), Range, and StoredDbgRecords.

Referenced by llvm::JumpThreadingPass::cloneInstructions().

◆ dropDbgRecords()

void llvm::DbgMarker::dropDbgRecords ( )

Erase all DbgRecords in this DbgMarker.

Definition at line 602 of file DebugProgramInstruction.cpp.

References llvm::DbgRecord::deleteRecord(), and StoredDbgRecords.

Referenced by eraseFromParent().

◆ dropOneDbgRecord()

void llvm::DbgMarker::dropOneDbgRecord ( DbgRecord * DR)

Erase a single DbgRecord from this marker.

In an ideal future, we would never erase an assignment in this way, but it's the equivalent to erasing a debug intrinsic from a block.

Definition at line 611 of file DebugProgramInstruction.cpp.

References assert(), llvm::DbgRecord::deleteRecord(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::DbgRecord::getMarker(), and StoredDbgRecords.

◆ dump()

LLVM_DUMP_METHOD void DbgMarker::dump ( ) const

Definition at line 5471 of file AsmWriter.cpp.

References llvm::dbgs(), and print().

◆ empty()

bool llvm::DbgMarker::empty ( ) const
inline

Definition at line 602 of file DebugProgramInstruction.h.

References StoredDbgRecords.

◆ eraseFromParent()

void llvm::DbgMarker::eraseFromParent ( )

Definition at line 660 of file DebugProgramInstruction.cpp.

References dropDbgRecords(), MarkedInstr, and removeFromParent().

Referenced by removeMarker().

◆ getDbgRecordRange() [1/2]

iterator_range< DbgRecord::self_iterator > llvm::DbgMarker::getDbgRecordRange ( )

Produce a range over all the DbgRecords in this Marker.

Definition at line 667 of file DebugProgramInstruction.cpp.

References llvm::make_range(), and StoredDbgRecords.

Referenced by llvm::getDbgRecordRange(), and getNextNode().

◆ getDbgRecordRange() [2/2]

iterator_range< DbgRecord::const_self_iterator > llvm::DbgMarker::getDbgRecordRange ( ) const

Definition at line 671 of file DebugProgramInstruction.cpp.

References llvm::make_range(), and StoredDbgRecords.

◆ getEmptyDbgRecordRange()

iterator_range< simple_ilist< DbgRecord >::iterator > llvm::DbgMarker::getEmptyDbgRecordRange ( )
inlinestatic

Definition at line 671 of file DebugProgramInstruction.h.

References EmptyDbgMarker, and llvm::make_range().

Referenced by llvm::getDbgRecordRange().

◆ getParent() [1/2]

BasicBlock * llvm::DbgMarker::getParent ( )

Definition at line 621 of file DebugProgramInstruction.cpp.

References MarkedInstr.

◆ getParent() [2/2]

const BasicBlock * llvm::DbgMarker::getParent ( ) const

◆ insertDbgRecord() [1/2]

void llvm::DbgMarker::insertDbgRecord ( DbgRecord * New,
bool InsertAtHead )

Insert a DbgRecord into this DbgMarker, at the end of the list.

If InsertAtHead is true, at the start.

Definition at line 685 of file DebugProgramInstruction.cpp.

References StoredDbgRecords.

Referenced by llvm::DbgRecord::insertBefore().

◆ insertDbgRecord() [2/2]

void llvm::DbgMarker::insertDbgRecord ( DbgRecord * New,
DbgRecord * InsertBefore )

Insert a DbgRecord prior to a DbgRecord contained within this marker.

Definition at line 690 of file DebugProgramInstruction.cpp.

References assert(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::DbgRecord::getMarker(), and StoredDbgRecords.

◆ insertDbgRecordAfter()

void llvm::DbgMarker::insertDbgRecordAfter ( DbgRecord * New,
DbgRecord * InsertAfter )

Insert a DbgRecord after a DbgRecord contained within this marker.

Definition at line 696 of file DebugProgramInstruction.cpp.

References assert(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::DbgRecord::getMarker(), and StoredDbgRecords.

Referenced by llvm::DbgRecord::insertAfter().

◆ print() [1/2]

void DbgMarker::print ( raw_ostream & O,
bool IsForDebug = false ) const

Implement operator<< on DbgMarker.

Definition at line 5158 of file AsmWriter.cpp.

References getModuleFromDPI(), and print().

Referenced by llvm::operator<<().

◆ print() [2/2]

void DbgMarker::print ( raw_ostream & ROS,
ModuleSlotTracker & MST,
bool IsForDebug ) const

◆ removeFromParent()

void llvm::DbgMarker::removeFromParent ( )

Definition at line 655 of file DebugProgramInstruction.cpp.

References MarkedInstr.

Referenced by eraseFromParent().

◆ removeMarker()

void llvm::DbgMarker::removeMarker ( )

Handle the removal of a marker: the position of debug-info has gone away, but the stored debug records should not.

Drop them onto the next instruction, or otherwise work out what to do with them.

Definition at line 623 of file DebugProgramInstruction.cpp.

References absorbDebugValues(), DbgMarker(), llvm::Instruction::DebugMarker, eraseFromParent(), llvm::ilist_node_impl< OptionsT >::getIterator(), getParent(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), MarkedInstr, llvm::BasicBlock::setTrailingDbgRecords(), and StoredDbgRecords.

Member Data Documentation

◆ EmptyDbgMarker

DbgMarker llvm::DbgMarker::EmptyDbgMarker
static

We generally act like all llvm Instructions have a range of DbgRecords attached to them, but in reality sometimes we don't allocate the DbgMarker to save time and memory, but still have to return ranges of DbgRecords.

When we need to describe such an unallocated DbgRecord range, use this static markers range instead. This will bite us if someone tries to insert a DbgRecord in that range, but they should be using the Official (TM) API for that.

Definition at line 669 of file DebugProgramInstruction.h.

Referenced by getEmptyDbgRecordRange().

◆ MarkedInstr

Instruction* llvm::DbgMarker::MarkedInstr = nullptr

Link back to the Instruction that owns this marker.

Can be null during operations that move a marker from one instruction to another.

Definition at line 595 of file DebugProgramInstruction.h.

Referenced by eraseFromParent(), getNextNode(), getParent(), getParent(), removeFromParent(), removeMarker(), and rewriteDebugUsers().

◆ StoredDbgRecords

simple_ilist<DbgRecord> llvm::DbgMarker::StoredDbgRecords

List of DbgRecords, the non-instruction equivalent of llvm.dbg.

  • intrinsics. There is a one-to-one relationship between each debug intrinsic in a block and each DbgRecord once the representation has been converted, and the ordering is meaningful in the same way.

Definition at line 601 of file DebugProgramInstruction.h.

Referenced by absorbDebugValues(), absorbDebugValues(), cloneDebugInfoFrom(), dropDbgRecords(), dropOneDbgRecord(), empty(), getDbgRecordRange(), getDbgRecordRange(), insertDbgRecord(), insertDbgRecord(), insertDbgRecordAfter(), llvm::DbgRecord::removeFromParent(), and removeMarker().


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