16#ifndef LLVM_IR_DEBUGINFO_H
17#define LLVM_IR_DEBUGINFO_H
37class DbgVariableIntrinsic;
38class DbgVariableRecord;
51 SmallVectorImpl<DbgVariableRecord *> &DbgVariableRecords);
55 SmallVectorImpl<DbgVariableRecord *> &DbgVariableRecords);
125 void processScope(
DIScope *Scope);
126 void processType(
DIType *DT);
160 return make_range(Scopes.begin(), Scopes.end());
194 "Can't get assignment instructions for non-assign DVR!");
202 if (
auto *
ID = Inst->
getMetadata(LLVMContext::MD_DIAssignID))
203 return cast<DIAssignID>(
ID)->getAllDbgVariableRecordUsers();
229 std::optional<DIExpression::FragmentInfo> &Result);
250 return std::tie(
LHS.Var,
LHS.DL) < std::tie(
RHS.Var,
RHS.DL);
253 return std::tie(
LHS.Var,
LHS.DL) == std::tie(
RHS.Var,
RHS.DL);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
This file defines DenseMapInfo traits for DenseMap.
This header defines various interfaces for pass management in LLVM.
Machine Check Debug Module
This file implements a set that has insertion order iteration characteristics.
This file defines the SmallPtrSet class.
This file defines the SmallSet class.
This file defines the SmallVector class.
an instruction to allocate memory on the stack
A container for analyses that lazily runs them and caches their results.
Convert @llvm.dbg.declare intrinsics into sets of @llvm.dbg.assign intrinsics by treating stores to t...
LLVM_ABI PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
A pair of DIGlobalVariable and DIExpression.
An imported module (C++ using directive or similar).
Base class for scope-like contexts.
Subprogram description. Uses SubclassData1.
A parsed version of the target data layout string in and methods for querying it.
Base class for non-instruction debug metadata records that have positions within IR.
Record of a variable value-assignment, aka a non instruction representation of the dbg....
LLVM_ABI DIAssignID * getAssignID() const
Utility to find all debug info in a module.
LLVM_ABI void processInstruction(const Module &M, const Instruction &I)
Process a single instruction and collect debug info anchors.
unsigned subprogram_count() const
LLVM_ABI void processModule(const Module &M)
Process entire module and collect debug info anchors.
SmallVectorImpl< DICompileUnit * >::const_iterator compile_unit_iterator
unsigned type_count() const
LLVM_ABI void processVariable(DILocalVariable *DVI)
Process a DILocalVariable.
LLVM_ABI void processSubprogram(DISubprogram *SP)
Process subprogram.
LLVM_ABI void processLocation(const Module &M, const DILocation *Loc)
Process debug info location.
SmallVectorImpl< DIGlobalVariableExpression * >::const_iterator global_variable_expression_iterator
LLVM_ABI void reset()
Clear all lists.
SmallVectorImpl< DIScope * >::const_iterator scope_iterator
unsigned global_variable_count() const
iterator_range< global_variable_expression_iterator > global_variables() const
iterator_range< subprogram_iterator > subprograms() const
SmallVectorImpl< DIType * >::const_iterator type_iterator
SmallVectorImpl< DISubprogram * >::const_iterator subprogram_iterator
iterator_range< type_iterator > types() const
iterator_range< scope_iterator > scopes() const
unsigned compile_unit_count() const
iterator_range< compile_unit_iterator > compile_units() const
LLVM_ABI void processDbgRecord(const Module &M, const DbgRecord &DR)
Process a DbgRecord.
unsigned scope_count() const
BasicBlockListType::iterator iterator
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this Instruction.
This is the common base class for memset/memcpy/memmove.
A Module instance is used to store all the information related to an LLVM module.
A set of analyses that are preserved following a run of a transformation pass.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
typename SuperClass::const_iterator const_iterator
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
An instruction for storing to memory.
LLVM Value Representation.
A range adaptor for a pair of iterators.
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
LLVM_ABI void deleteAll(Function *F)
Remove all Assignment Tracking related intrinsics and metadata from F.
LLVM_ABI AssignmentInstRange getAssignmentInsts(DIAssignID *ID)
Return a range of instructions (typically just one) that have ID as an attachment.
LLVM_ABI 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.
LLVM_ABI void remapAssignID(DenseMap< DIAssignID *, DIAssignID * > &Map, Instruction &I)
Replace DIAssignID uses and attachments with IDs from Map.
SmallVector< DbgVariableRecord * > getDVRAssignmentMarkers(const Instruction *Inst)
Return a range of dbg_assign records for which Inst performs the assignment they encode.
LLVM_ABI void deleteAssignmentMarkers(const Instruction *Inst)
Delete the llvm.dbg.assign intrinsics linked to Inst.
LLVM_ABI std::optional< AssignmentInfo > getAssignmentInfo(const DataLayout &DL, const MemIntrinsic *I)
LLVM_ABI void RAUW(DIAssignID *Old, DIAssignID *New)
Replace all uses (and attachments) of Old with New.
LLVM_ABI bool calculateFragmentIntersect(const DataLayout &DL, const Value *Dest, uint64_t SliceOffsetInBits, uint64_t SliceSizeInBits, const DbgVariableRecord *DVRAssign, std::optional< DIExpression::FragmentInfo > &Result)
Calculate the fragment of the variable in DAI covered from (Dest + SliceOffsetInBits) to to (Dest + S...
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI void findDbgValues(Value *V, SmallVectorImpl< DbgVariableRecord * > &DbgVariableRecords)
Finds the dbg.values describing a value.
LLVM_ABI bool stripDebugInfo(Function &F)
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
@ Import
Import information from summary.
LLVM_ABI bool stripNonLineTableDebugInfo(Module &M)
Downgrade the debug info in a module to contain only line table information.
LLVM_ABI TinyPtrVector< DbgVariableRecord * > findDVRValues(Value *V)
As above, for DVRValues.
LLVM_ABI unsigned getDebugMetadataVersionFromModule(const Module &M)
Return Debug Info Metadata Version by checking module flags.
LLVM_ABI bool StripDebugInfo(Module &M)
Strip debug info in the module if it exists.
LLVM_ABI bool isAssignmentTrackingEnabled(const Module &M)
Return true if assignment tracking is enabled for module M.
LLVM_ABI DebugLoc getDebugValueLoc(DbgVariableRecord *DVR)
Produce a DebugLoc to use for each dbg.declare that is promoted to a dbg.value.
LLVM_ABI TinyPtrVector< DbgVariableRecord * > findDVRDeclares(Value *V)
Finds dbg.declare records declaring local variables as living in the memory that 'V' points to.
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
LLVM_ABI void updateLoopMetadataDebugLocations(Instruction &I, function_ref< Metadata *(Metadata *)> Updater)
Update the debug locations contained within the MD_loop metadata attached to the instruction I,...
LLVM_ABI void findDbgUsers(Value *V, SmallVectorImpl< DbgVariableRecord * > &DbgVariableRecords)
Finds the debug info records describing a value.
LLVM_ABI DISubprogram * getDISubprogram(const MDNode *Scope)
Find subprogram that is enclosing this scope.
static bool isEqual(const at::VarRecord &A, const at::VarRecord &B)
static at::VarRecord getEmptyKey()
static unsigned getHashValue(const at::VarRecord &Var)
static at::VarRecord getTombstoneKey()
An information struct used to provide DenseMap with the various necessary components for a given valu...
A CRTP mix-in to automatically provide informational APIs needed for passes.
Describes properties of a store that has a static size and offset into a some base storage.
AssignmentInfo(const DataLayout &DL, AllocaInst const *Base, uint64_t OffsetInBits, uint64_t SizeInBits)
uint64_t OffsetInBits
Offset into Base.
uint64_t SizeInBits
Number of bits stored.
AllocaInst const * Base
Base storage.
bool StoreToWholeAlloca
SizeInBits equals the size of the base storage.
Helper struct for trackAssignments, below.
VarRecord(DbgVariableRecord *DVR)
friend bool operator==(const VarRecord &LHS, const VarRecord &RHS)
friend bool operator<(const VarRecord &LHS, const VarRecord &RHS)
VarRecord(DILocalVariable *Var, DILocation *DL)