LLVM 18.0.0git
|
Assignment Tracking (at). More...
Classes | |
struct | AssignmentInfo |
Describes properties of a store that has a static size and offset into a some base storage. More... | |
class | DbgAssignIt |
High level: this is an iterator for llvm.dbg.assign intrinsics. More... | |
struct | VarRecord |
Helper struct for trackAssignments, below. More... | |
Typedefs | |
using | AssignmentInstRange = iterator_range< SmallVectorImpl< Instruction * >::iterator > |
A range of instructions. | |
using | AssignmentMarkerRange = iterator_range< DbgAssignIt > |
A range of llvm.dbg.assign intrinsics. | |
using | StorageToVarsMap = DenseMap< const AllocaInst *, SmallSetVector< VarRecord, 2 > > |
Map of backing storage to a set of variables that are stored to it. | |
Functions | |
AssignmentInstRange | getAssignmentInsts (DIAssignID *ID) |
Return a range of instructions (typically just one) that have ID as an attachment. | |
AssignmentInstRange | getAssignmentInsts (const DbgAssignIntrinsic *DAI) |
Return a range of instructions (typically just one) that perform the assignment that DAI encodes. | |
AssignmentMarkerRange | getAssignmentMarkers (DIAssignID *ID) |
Return a range of dbg.assign intrinsics which use \ID as an operand. | |
AssignmentMarkerRange | getAssignmentMarkers (const Instruction *Inst) |
Return a range of dbg.assign intrinsics for which Inst performs the assignment they encode. | |
void | deleteAssignmentMarkers (const Instruction *Inst) |
Delete the llvm.dbg.assign intrinsics linked to Inst . | |
void | RAUW (DIAssignID *Old, DIAssignID *New) |
Replace all uses (and attachments) of Old with New . | |
void | deleteAll (Function *F) |
Remove all Assignment Tracking related intrinsics and metadata from F . | |
bool | calculateFragmentIntersect (const DataLayout &DL, const Value *Dest, uint64_t SliceOffsetInBits, uint64_t SliceSizeInBits, const DbgAssignIntrinsic *DAI, std::optional< DIExpression::FragmentInfo > &Result) |
Calculate the fragment of the variable in DAI covered from (Dest + SliceOffsetInBits) to to (Dest + SliceOffsetInBits + SliceSizeInBits) | |
void | trackAssignments (Function::iterator Start, Function::iterator End, const StorageToVarsMap &Vars, const DataLayout &DL, bool DebugPrints=false) |
Track assignments to Vars between Start and End . | |
std::optional< AssignmentInfo > | getAssignmentInfo (const DataLayout &DL, const MemIntrinsic *I) |
std::optional< AssignmentInfo > | getAssignmentInfo (const DataLayout &DL, const StoreInst *SI) |
std::optional< AssignmentInfo > | getAssignmentInfo (const DataLayout &DL, const AllocaInst *AI) |
Assignment Tracking (at).
using llvm::at::AssignmentInstRange = typedef iterator_range<SmallVectorImpl<Instruction *>::iterator> |
A range of instructions.
Definition at line 178 of file DebugInfo.h.
using llvm::at::AssignmentMarkerRange = typedef iterator_range<DbgAssignIt> |
A range of llvm.dbg.assign intrinsics.
Definition at line 211 of file DebugInfo.h.
using llvm::at::StorageToVarsMap = typedef DenseMap<const AllocaInst *, SmallSetVector<VarRecord, 2> > |
Map of backing storage to a set of variables that are stored to it.
TODO: Backing storage shouldn't be limited to allocas only. Some local variables have their storage allocated by the calling function (addresses passed in with sret & byval parameters).
Definition at line 296 of file DebugInfo.h.
bool llvm::at::calculateFragmentIntersect | ( | const DataLayout & | DL, |
const Value * | Dest, | ||
uint64_t | SliceOffsetInBits, | ||
uint64_t | SliceSizeInBits, | ||
const DbgAssignIntrinsic * | DAI, | ||
std::optional< DIExpression::FragmentInfo > & | Result | ||
) |
Calculate the fragment of the variable in DAI
covered from (Dest + SliceOffsetInBits) to to (Dest + SliceOffsetInBits + SliceSizeInBits)
Return false if it can't be calculated for any reason. Result is set to nullopt if the intersect equals the variable fragment (or variable size) in DAI.
Result contains a zero-sized fragment if there's no intersect.
Definition at line 1803 of file DebugInfo.cpp.
References DL, llvm::DIExpression::extractIfOffset(), llvm::DbgAssignIntrinsic::getAddress(), llvm::DbgAssignIntrinsic::getAddressExpression(), llvm::DbgVariableIntrinsic::getFragmentOrEntireVariable(), llvm::Value::getPointerOffsetFrom(), llvm::DIExpression::FragmentInfo::intersect(), llvm::DbgAssignIntrinsic::isKillAddress(), llvm::DIExpression::FragmentInfo::OffsetInBits, and llvm::DIExpression::FragmentInfo::SizeInBits.
Referenced by buildOverlapMapAndRecordDeclares(), and shortenAssignment().
void llvm::at::deleteAll | ( | Function * | F | ) |
Remove all Assignment Tracking related intrinsics and metadata from F
.
Definition at line 1789 of file DebugInfo.cpp.
References F, I, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
void llvm::at::deleteAssignmentMarkers | ( | const Instruction * | Inst | ) |
Delete the llvm.dbg.assign intrinsics linked to Inst
.
Definition at line 1762 of file DebugInfo.cpp.
References getAssignmentMarkers().
Referenced by promoteSingleBlockAlloca(), and rewriteSingleStoreAlloca().
std::optional< AssignmentInfo > llvm::at::getAssignmentInfo | ( | const DataLayout & | DL, |
const AllocaInst * | AI | ||
) |
Definition at line 1979 of file DebugInfo.cpp.
References DL, llvm::AllocaInst::getAllocatedType(), and getAssignmentInfoImpl().
std::optional< AssignmentInfo > llvm::at::getAssignmentInfo | ( | const DataLayout & | DL, |
const MemIntrinsic * | I | ||
) |
Definition at line 1961 of file DebugInfo.cpp.
References DL, getAssignmentInfoImpl(), llvm::TypeSize::getFixed(), and I.
Referenced by getUntaggedStoreAssignmentInfo(), and trackAssignments().
std::optional< AssignmentInfo > llvm::at::getAssignmentInfo | ( | const DataLayout & | DL, |
const StoreInst * | SI | ||
) |
Definition at line 1973 of file DebugInfo.cpp.
References DL, and getAssignmentInfoImpl().
|
inline |
Return a range of instructions (typically just one) that perform the assignment that DAI
encodes.
Iterators invalidated by adding or removing DIAssignID metadata to/from any instruction (including by deleting or cloning instructions).
Definition at line 189 of file DebugInfo.h.
References llvm::DbgAssignIntrinsic::getAssignID(), and getAssignmentInsts().
AssignmentInstRange llvm::at::getAssignmentInsts | ( | DIAssignID * | ID | ) |
Return a range of instructions (typically just one) that have ID
as an attachment.
Iterators invalidated by adding or removing DIAssignID metadata to/from any instruction (including by deleting or cloning instructions).
Definition at line 1736 of file DebugInfo.cpp.
References assert(), llvm::LLVMContextImpl::AssignmentIDToInstrs, llvm::make_range(), and llvm::LLVMContext::pImpl.
Referenced by getAssignmentInsts(), RAUW(), remomveUndefDbgAssignsFromEntryBlock(), removeRedundantDbgInstrsUsingBackwardScan(), and removeRedundantDbgInstrsUsingForwardScan().
|
inline |
Return a range of dbg.assign intrinsics for which Inst
performs the assignment they encode.
Iterators invalidated by deleting an intrinsic contained in this range.
Definition at line 218 of file DebugInfo.h.
References getAssignmentMarkers(), llvm::Instruction::getMetadata(), and llvm::make_range().
AssignmentMarkerRange llvm::at::getAssignmentMarkers | ( | DIAssignID * | ID | ) |
Return a range of dbg.assign intrinsics which use \ID as an operand.
Iterators invalidated by deleting an intrinsic contained in this range.
Definition at line 1748 of file DebugInfo.cpp.
References assert(), llvm::MetadataAsValue::getIfExists(), and llvm::make_range().
Referenced by buildOverlapMapAndRecordDeclares(), collectEscapedLocals(), deleteAssignmentMarkers(), findVarsWithStackSlot(), getAssignmentMarkers(), migrateDebugInfo(), shortenAssignment(), and llvm::InstCombinerImpl::SimplifyAnyMemSet().
void llvm::at::RAUW | ( | DIAssignID * | Old, |
DIAssignID * | New | ||
) |
Replace all uses (and attachments) of Old
with New
.
Definition at line 1771 of file DebugInfo.cpp.
References llvm::iterator_range< IteratorT >::begin(), llvm::iterator_range< IteratorT >::end(), llvm::MetadataAsValue::get(), getAssignmentInsts(), llvm::MDNode::getContext(), llvm::MetadataAsValue::getIfExists(), and I.
Referenced by llvm::Instruction::mergeDIAssignID().
void llvm::at::trackAssignments | ( | Function::iterator | Start, |
Function::iterator | End, | ||
const StorageToVarsMap & | Vars, | ||
const DataLayout & | DL, | ||
bool | DebugPrints = false |
||
) |
Track assignments to Vars
between Start
and End
.
Definition at line 2034 of file DebugInfo.cpp.
References assert(), DL, emitDbgAssign(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), End, llvm::errs(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::UndefValue::get(), getAssignmentInfo(), llvm::DIAssignID::getDistinct(), llvm::Type::getInt1Ty(), I, Info, LLVM_DEBUG, and MI.
Referenced by trackInlinedStores().