LLVM 18.0.0git
|
Tuple of metadata. More...
#include "llvm/IR/Metadata.h"
Public Member Functions | |
unsigned | getHash () const |
Get the hash, if any. | |
TempMDTuple | clone () const |
Return a (temporary) clone of this. | |
void | push_back (Metadata *MD) |
Append an element to the tuple. This will resize the node. | |
void | pop_back () |
Shrink the operands by 1. | |
![]() | |
MDNode (const MDNode &)=delete | |
void | operator= (const MDNode &)=delete |
void * | operator new (size_t)=delete |
TempMDNode | clone () const |
Create a (temporary) clone of this. | |
LLVMContext & | getContext () const |
void | replaceOperandWith (unsigned I, Metadata *New) |
Replace a specific operand. | |
bool | isResolved () const |
Check if node is fully resolved. | |
bool | isUniqued () const |
bool | isDistinct () const |
bool | isTemporary () const |
bool | isReplaceable () const |
void | replaceAllUsesWith (Metadata *MD) |
RAUW a temporary. | |
void | resolveCycles () |
Resolve cycles. | |
void | resolve () |
Resolve a unique, unresolved node. | |
op_iterator | op_begin () const |
op_iterator | op_end () const |
ArrayRef< MDOperand > | operands () const |
const MDOperand & | getOperand (unsigned I) const |
unsigned | getNumOperands () const |
Return number of MDNode operands. | |
bool | isTBAAVtableAccess () const |
Check whether MDNode is a vtable access. | |
void | printTree (raw_ostream &OS, const Module *M=nullptr) const |
Print in tree shape. | |
void | printTree (raw_ostream &OS, ModuleSlotTracker &MST, const Module *M=nullptr) const |
void | dumpTree () const |
User-friendly dump in tree shape. | |
void | dumpTree (const Module *M) const |
![]() | |
unsigned | getMetadataID () const |
void | dump () const |
User-friendly dump. | |
void | dump (const Module *M) const |
void | print (raw_ostream &OS, const Module *M=nullptr, bool IsForDebug=false) const |
Print. | |
void | print (raw_ostream &OS, ModuleSlotTracker &MST, const Module *M=nullptr, bool IsForDebug=false) const |
void | printAsOperand (raw_ostream &OS, const Module *M=nullptr) const |
Print as operand. | |
void | printAsOperand (raw_ostream &OS, ModuleSlotTracker &MST, const Module *M=nullptr) const |
Static Public Member Functions | |
static MDTuple * | get (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
static MDTuple * | getIfExists (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
static MDTuple * | getDistinct (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
Return a distinct node. | |
static TempMDTuple | getTemporary (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
Return a temporary node. | |
static bool | classof (const Metadata *MD) |
![]() | |
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 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 MDNode * | concatenate (MDNode *A, MDNode *B) |
Methods for metadata merging. | |
static MDNode * | intersect (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericTBAA (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericFPMath (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericRange (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericAliasScope (MDNode *A, MDNode *B) |
static MDNode * | getMostGenericAlignmentOrDereferenceable (MDNode *A, MDNode *B) |
static MDNode * | getMergedProfMetadata (MDNode *A, MDNode *B, const Instruction *AInstr, const Instruction *BInstr) |
Merge !prof metadata from two instructions. | |
Friends | |
class | LLVMContextImpl |
class | MDNode |
Additional Inherited Members | |
![]() | |
using | op_iterator = const MDOperand * |
using | op_range = iterator_range< op_iterator > |
![]() | |
enum | MetadataKind |
![]() | |
using | mutable_op_range = iterator_range< MDOperand * > |
![]() | |
enum | StorageType { Uniqued , Distinct , Temporary } |
Active type of storage. More... | |
![]() | |
MDNode (LLVMContext &Context, unsigned ID, StorageType Storage, ArrayRef< Metadata * > Ops1, ArrayRef< Metadata * > Ops2=std::nullopt) | |
~MDNode ()=default | |
void * | operator new (size_t Size, size_t NumOps, StorageType Storage) |
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. | |
void | dropAllReferences () |
MDOperand * | mutable_begin () |
MDOperand * | mutable_end () |
mutable_op_range | mutable_operands () |
void | setOperand (unsigned I, Metadata *New) |
Set an operand. | |
unsigned | getNumUnresolved () const |
void | setNumUnresolved (unsigned N) |
void | storeDistinctInContext () |
void | resize (size_t NumOps) |
Resize the node to hold NumOps operands. | |
![]() | |
Metadata (unsigned ID, StorageType Storage) | |
~Metadata ()=default | |
void | handleChangedOperand (void *, Metadata *) |
Default handling of a changed operand, which asserts. | |
![]() | |
template<class T , class StoreT > | |
static T * | storeImpl (T *N, StorageType Storage, StoreT &Store) |
template<class T > | |
static T * | storeImpl (T *N, StorageType Storage) |
![]() | |
unsigned char | Storage: 7 |
Storage flag for non-uniqued, otherwise unowned, metadata. | |
unsigned char | SubclassData1: 1 |
unsigned short | SubclassData16 = 0 |
unsigned | SubclassData32 = 0 |
Tuple of metadata.
This is the simple MDNode arbitrary tuple. Nodes are uniqued by default based on their operands.
Definition at line 1433 of file Metadata.h.
Definition at line 1499 of file Metadata.h.
References llvm::Metadata::getMetadataID().
|
inline |
Return a (temporary) clone of this.
Definition at line 1487 of file Metadata.h.
|
inlinestatic |
Definition at line 1461 of file Metadata.h.
References Context, and llvm::Metadata::Uniqued.
Referenced by llvm::Instruction::addAnnotationMetadata(), llvm::GlobalObject::addTypeMetadata(), annotateFunctionWithHashMismatch(), buildFrameDebugInfo(), llvm::DIBuilder::finalize(), llvm::DIBuilder::finalizeSubprogram(), llvm::MDNode::get(), getKeyFPValMD(), getKeyValMD(), llvm::ProfileSummary::getMD(), llvm::DIBuilder::getOrCreateArray(), llvm::DIBuilder::getOrCreateMacroArray(), stripDeadDebugInfoImpl(), llvm::upgradeInstructionLoopAttachment(), and upgradeLoopArgument().
|
inlinestatic |
Return a distinct node.
Return a distinct node – i.e., a node that is not uniqued.
Definition at line 1472 of file Metadata.h.
References Context, and llvm::Metadata::Distinct.
Referenced by addModuleFlags(), and llvm::MDNode::getDistinct().
|
inline |
Get the hash, if any.
Definition at line 1459 of file Metadata.h.
References llvm::Metadata::SubclassData32.
|
inlinestatic |
Definition at line 1465 of file Metadata.h.
References Context, and llvm::Metadata::Uniqued.
Referenced by llvm::MDNode::getIfExists().
|
inlinestatic |
Return a temporary node.
For use in constructing cyclic MDNode structures. A temporary MDNode is not uniqued, may be RAUW'd, and must be manually deleted with deleteTemporary.
Definition at line 1481 of file Metadata.h.
References Context, and llvm::Metadata::Temporary.
Referenced by llvm::MDNode::getTemporary(), and LLVMTemporaryMDNode().
|
inline |
Shrink the operands by 1.
Definition at line 1497 of file Metadata.h.
References llvm::MDNode::getNumOperands(), and llvm::MDNode::resize().
|
inline |
Append an element to the tuple. This will resize the node.
Definition at line 1490 of file Metadata.h.
References llvm::MDNode::getNumOperands(), llvm::MDNode::resize(), and llvm::MDNode::setOperand().
|
friend |
Definition at line 1434 of file Metadata.h.
|
friend |
Definition at line 1435 of file Metadata.h.