|
LLVM 23.0.0git
|
Subprogram description. Uses SubclassData1. More...
#include "llvm/IR/DebugInfoMetadata.h"
Public Types | |
| enum | DISPFlags : uint32_t { SPFlagNonvirtual = SPFlagZero , SPFlagVirtuality = SPFlagVirtual | SPFlagPureVirtual } |
| Debug info subprogram flags. More... | |
| Public Types inherited from llvm::DINode | |
| enum | DIFlags : uint32_t { FlagAccessibility = FlagPrivate | FlagProtected | FlagPublic , FlagPtrToMemberRep } |
| Debug info flags. More... | |
| Public Types inherited from llvm::MDNode | |
| using | op_iterator = const MDOperand * |
| using | op_range = iterator_range<op_iterator> |
| Public Types inherited from llvm::Metadata | |
| enum | MetadataKind |
Static Public Member Functions | |
| static LLVM_ABI DISPFlags | getFlag (StringRef Flag) |
| static LLVM_ABI StringRef | getFlagString (DISPFlags Flag) |
| static LLVM_ABI DISPFlags | splitFlags (DISPFlags Flags, SmallVectorImpl< DISPFlags > &SplitFlags) |
| Split up a flags bitfield for easier printing. | |
| static LLVM_ABI DISPFlags | toSPFlags (bool IsLocalToUnit, bool IsDefinition, bool IsOptimized, unsigned Virtuality=SPFlagNonvirtual, bool IsMainSubprogram=false) |
| static DILocalScope * | getRetainedNodeScope (MDNode *N) |
| static const DIScope * | getRawRetainedNodeScope (const MDNode *N) |
| static DIScope * | getRawRetainedNodeScope (MDNode *N) |
| template<typename RangeT> | |
| static void | cleanupRetainedNodes (const RangeT &NewDistinctSPs) |
| Calls SP->cleanupRetainedNodes() for a range of DISubprograms. | |
| static bool | classof (const Metadata *MD) |
| Static Public Member Functions inherited from llvm::DILocalScope | |
| static LLVM_ABI DILocalScope * | cloneScopeForSubprogram (DILocalScope &RootScope, DISubprogram &NewSP, LLVMContext &Ctx, DenseMap< const MDNode *, MDNode * > &Cache) |
| Traverses the scope chain rooted at RootScope until it hits a Subprogram, recreating the chain with "NewSP" instead. | |
| static bool | classof (const Metadata *MD) |
| Static Public Member Functions inherited from llvm::DIScope | |
| static bool | classof (const Metadata *MD) |
| Static Public Member Functions inherited from llvm::DINode | |
| static LLVM_ABI DIFlags | getFlag (StringRef Flag) |
| static LLVM_ABI StringRef | getFlagString (DIFlags Flag) |
| static LLVM_ABI DIFlags | splitFlags (DIFlags Flags, SmallVectorImpl< DIFlags > &SplitFlags) |
| Split up a flags bitfield. | |
| static bool | classof (const Metadata *MD) |
| Static Public Member Functions inherited from llvm::MDNode | |
| static MDTuple * | get (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
| static MDTuple * | getIfExists (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
| static MDTuple * | getDistinct (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
| static TempMDTuple | getTemporary (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
| static LLVM_ABI void | deleteTemporary (MDNode *N) |
| Deallocate a node created by getTemporary. | |
| template<class T> | |
| static std::enable_if_t< std::is_base_of< MDNode, T >::value, T * > | replaceWithPermanent (std::unique_ptr< T, TempMDNodeDeleter > N) |
| Replace a temporary node with a permanent one. | |
| template<class T> | |
| static std::enable_if_t< std::is_base_of< MDNode, T >::value, T * > | replaceWithUniqued (std::unique_ptr< T, TempMDNodeDeleter > N) |
| Replace a temporary node with a uniqued one. | |
| template<class T> | |
| static std::enable_if_t< std::is_base_of< MDNode, T >::value, T * > | replaceWithDistinct (std::unique_ptr< T, TempMDNodeDeleter > N) |
| Replace a temporary node with a distinct one. | |
| static bool | classof (const Metadata *MD) |
| Methods for support type inquiry through isa, cast, and dyn_cast: | |
| static LLVM_ABI MDNode * | concatenate (MDNode *A, MDNode *B) |
| Methods for metadata merging. | |
| static LLVM_ABI MDNode * | intersect (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMostGenericTBAA (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMostGenericFPMath (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMostGenericRange (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMostGenericNoaliasAddrspace (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMostGenericAliasScope (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMostGenericAlignmentOrDereferenceable (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMostGenericNoFPClass (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMergedProfMetadata (MDNode *A, MDNode *B, const Instruction *AInstr, const Instruction *BInstr) |
| Merge !prof metadata from two instructions. | |
| static LLVM_ABI MDNode * | getMergedMemProfMetadata (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMergedCallsiteMetadata (MDNode *A, MDNode *B) |
| static LLVM_ABI MDNode * | getMergedCalleeTypeMetadata (const MDNode *A, const MDNode *B) |
| static LLVM_ABI CaptureComponents | toCaptureComponents (const MDNode *MD) |
| Convert !captures metadata to CaptureComponents. MD may be nullptr. | |
| static LLVM_ABI MDNode * | fromCaptureComponents (LLVMContext &Ctx, CaptureComponents CC) |
| Convert CaptureComponents to !captures metadata. | |
Friends | |
| class | LLVMContextImpl |
| class | MDNode |
Additional Inherited Members | |
| Static Public Attributes inherited from llvm::Metadata | |
| static constexpr const unsigned | PoisonGeneratingIDs [] |
| Metadata IDs that may generate poison. | |
| Protected Types inherited from llvm::MDNode | |
| using | mutable_op_range = iterator_range<MDOperand *> |
| Protected Types inherited from llvm::Metadata | |
| enum | StorageType { Uniqued , Distinct , Temporary } |
| Active type of storage. More... | |
| Protected Member Functions inherited from llvm::DILocalScope | |
| DILocalScope (LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, ArrayRef< Metadata * > Ops) | |
| ~DILocalScope ()=default | |
| Protected Member Functions inherited from llvm::DIScope | |
| DIScope (LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, ArrayRef< Metadata * > Ops) | |
| ~DIScope ()=default | |
| Protected Member Functions inherited from llvm::DINode | |
| DINode (LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, ArrayRef< Metadata * > Ops1, ArrayRef< Metadata * > Ops2={}) | |
| ~DINode ()=default | |
| template<class Ty> | |
| Ty * | getOperandAs (unsigned I) const |
| StringRef | getStringOperand (unsigned I) const |
| void | setTag (unsigned Tag) |
| Allow subclasses to mutate the tag. | |
| Protected Member Functions inherited from llvm::MDNode | |
| LLVM_ABI | MDNode (LLVMContext &Context, unsigned ID, StorageType Storage, ArrayRef< Metadata * > Ops1, ArrayRef< Metadata * > Ops2={}) |
| ~MDNode ()=default | |
| LLVM_ABI void * | operator new (size_t Size, size_t NumOps, StorageType Storage) |
| LLVM_ABI void | operator delete (void *Mem) |
| void | operator delete (void *, unsigned) |
| Required by std, but never called. | |
| void | operator delete (void *, unsigned, bool) |
| Required by std, but never called. | |
| LLVM_ABI void | dropAllReferences () |
| MDOperand * | mutable_begin () |
| MDOperand * | mutable_end () |
| mutable_op_range | mutable_operands () |
| LLVM_ABI void | setOperand (unsigned I, Metadata *New) |
| Set an operand. | |
| unsigned | getNumUnresolved () const |
| void | setNumUnresolved (unsigned N) |
| LLVM_ABI void | storeDistinctInContext () |
| void | resize (size_t NumOps) |
| Resize the node to hold NumOps operands. | |
| Protected Member Functions inherited from llvm::Metadata | |
| Metadata (unsigned ID, StorageType Storage) | |
| ~Metadata ()=default | |
| void | handleChangedOperand (void *, Metadata *) |
| Default handling of a changed operand, which asserts. | |
| Static Protected Member Functions inherited from llvm::DINode | |
| static MDString * | getCanonicalMDString (LLVMContext &Context, StringRef S) |
| Static Protected Member Functions inherited from llvm::MDNode | |
| template<class T, class StoreT> | |
| static T * | storeImpl (T *N, StorageType Storage, StoreT &Store) |
| template<class T> | |
| static T * | storeImpl (T *N, StorageType Storage) |
| Protected Attributes inherited from llvm::Metadata | |
| unsigned char | Storage: 7 |
| Storage flag for non-uniqued, otherwise unowned, metadata. | |
| unsigned char | SubclassData1: 1 |
| unsigned short | SubclassData16 = 0 |
| unsigned | SubclassData32 = 0 |
Subprogram description. Uses SubclassData1.
Definition at line 2237 of file DebugInfoMetadata.h.
Debug info subprogram flags.
| Enumerator | |
|---|---|
| SPFlagNonvirtual | |
| SPFlagVirtuality | |
Definition at line 2252 of file DebugInfoMetadata.h.
Definition at line 2589 of file DebugInfoMetadata.h.
References llvm::Metadata::getMetadataID().
| void DISubprogram::cleanupRetainedNodes | ( | ) |
When IR modules are merged, typically during LTO, the merged module may contain several types having the same linkageName.
They are supposed to represent the same type included by multiple source code files from a single header file.
DebugTypeODRUniquing feature uniques (deduplicates) such types based on their linkageName during metadata loading, to speed up compilation and reduce debug info size.
However, since function-local types are tracked in DISubprogram's retainedNodes field, a single local type may be referenced by multiple DISubprograms via retainedNodes as the result of DebugTypeODRUniquing. But retainedNodes field of a DISubprogram is meant to hold only subprogram's own local entities, therefore such references may cause crashes.
To address this problem, this method is called for each new subprogram after module loading. It removes references to types belonging to other DISubprograms from a subprogram's retainedNodes list. If a corresponding IR function refers to local scopes from another subprogram, emitted debug info (e.g. DWARF) should rely on cross-subprogram references (and cross-CU references, as subprograms may belong to different compile units). This is also a drawback: when a subprogram refers to types that are local to another subprogram, it is more complicated for debugger to properly discover local types of a current scope for expression evaluation.
Definition at line 1473 of file DebugInfoMetadata.cpp.
References llvm::cast(), llvm::cast_or_null(), llvm::dyn_cast_or_null(), llvm::MDNode::get(), llvm::MDNode::getContext(), llvm::isa(), llvm::isa_and_present(), N, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorImpl< T >::reserve(), RetainedNodes, llvm::SmallVectorTemplateCommon< T, typename >::size(), and T.
|
inlinestatic |
Calls SP->cleanupRetainedNodes() for a range of DISubprograms.
Definition at line 2579 of file DebugInfoMetadata.h.
| llvm::DISubprogram::DEFINE_MDNODE_GET | ( | DISubprogram | , |
| (DIScope *Scope, StringRef Name, StringRef LinkageName, DIFile *File, unsigned Line, DISubroutineType *Type, unsigned ScopeLine, DIType *ContainingType, unsigned VirtualIndex, int ThisAdjustment, DIFlags Flags, DISPFlags SPFlags, DICompileUnit *Unit, DITemplateParameterArray TemplateParams=nullptr, DISubprogram *Declaration=nullptr, DINodeArray RetainedNodes=nullptr, DITypeArray ThrownTypes=nullptr, DINodeArray Annotations=nullptr, StringRef TargetFuncName="", bool UsesKeyInstructions=false) | , | ||
| (Scope, Name, LinkageName, File, Line, Type, ScopeLine, ContainingType, VirtualIndex, ThisAdjustment, Flags, SPFlags, Unit, TemplateParams, Declaration, RetainedNodes, ThrownTypes, Annotations, TargetFuncName, UsesKeyInstructions) | ) |
References Annotations, ContainingType, Declaration, File, LinkageName, Name, RetainedNodes, Scope, TargetFuncName, TemplateParams, ThrownTypes, Type, Unit, and UsesKeyInstructions.
Check if this subprogram describes the given function.
FIXME: Should this be looking through bitcasts?
Definition at line 1443 of file DebugInfoMetadata.cpp.
|
inline |
For each retained node, applies one of the given functions depending on the type of a node.
Definition at line 2541 of file DebugInfoMetadata.h.
References llvm_unreachable, MDNode, and N.
|
static |
Definition at line 1366 of file DebugInfoMetadata.cpp.
References llvm::StringSwitch< T, R >::Default().
Referenced by llvm::LLParser::parseMDField().
Definition at line 1373 of file DebugInfoMetadata.cpp.
References SPFlagVirtuality.
Definition at line 1457 of file DebugInfoMetadata.cpp.
References getRawRetainedNodeScopeInternal(), MDNode, and N.
Referenced by llvm::DIBuilder::finalizeSubprogram(), and getRetainedNodeScope().
Definition at line 1461 of file DebugInfoMetadata.cpp.
References getRawRetainedNodeScopeInternal(), MDNode, and N.
|
static |
Definition at line 1465 of file DebugInfoMetadata.cpp.
References llvm::cast(), llvm::DILocalScope::DILocalScope(), getRawRetainedNodeScope(), MDNode, and N.
Referenced by getRetainedNodeScope().
|
static |
Split up a flags bitfield for easier printing.
Split Flags into SplitFlags, a vector of its components. Returns any remaining (unrecognized) bits.
Definition at line 1387 of file DebugInfoMetadata.cpp.
|
static |
Definition at line 1312 of file DebugInfoMetadata.cpp.
References SPFlagVirtuality.
Referenced by pack_into_DISPFlags().
|
friend |
Definition at line 2238 of file DebugInfoMetadata.h.
References LLVMContextImpl.
Referenced by LLVMContextImpl.
|
friend |
Definition at line 2239 of file DebugInfoMetadata.h.
References MDNode.
Referenced by forEachRetainedNode(), getRawRetainedNodeScope(), getRawRetainedNodeScope(), getRetainedNodeScope(), and MDNode.
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata Metadata Metadata* llvm::DISubprogram::Annotations = nullptr |
Definition at line 2351 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata* llvm::DISubprogram::ContainingType |
Definition at line 2347 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata* llvm::DISubprogram::Declaration = nullptr |
Definition at line 2349 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
Definition at line 2345 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags llvm::DISubprogram::Flags |
Definition at line 2348 of file DebugInfoMetadata.h.
Definition at line 2346 of file DebugInfoMetadata.h.
Definition at line 2345 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
Definition at line 2345 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata* llvm::DISubprogram::RetainedNodes = nullptr |
Definition at line 2350 of file DebugInfoMetadata.h.
Referenced by cleanupRetainedNodes(), and DEFINE_MDNODE_GET().
| Metadata* llvm::DISubprogram::Scope |
Definition at line 2345 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
Definition at line 2346 of file DebugInfoMetadata.h.
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags llvm::DISubprogram::SPFlags |
Definition at line 2348 of file DebugInfoMetadata.h.
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata Metadata Metadata MDString* llvm::DISubprogram::TargetFuncName = nullptr |
Definition at line 2351 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata* llvm::DISubprogram::TemplateParams = nullptr |
Definition at line 2349 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int llvm::DISubprogram::ThisAdjustment |
Definition at line 2347 of file DebugInfoMetadata.h.
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata Metadata* llvm::DISubprogram::ThrownTypes = nullptr |
Definition at line 2350 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
Definition at line 2346 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata* llvm::DISubprogram::Unit |
Definition at line 2348 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata Metadata Metadata MDString bool llvm::DISubprogram::UsesKeyInstructions |
Definition at line 2352 of file DebugInfoMetadata.h.
Referenced by DEFINE_MDNODE_GET().
| Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned llvm::DISubprogram::VirtualIndex |
Definition at line 2347 of file DebugInfoMetadata.h.