LLVM 22.0.0git
llvm::MDNode Class Reference

Metadata node. More...

#include "llvm/IR/Metadata.h"

Inheritance diagram for llvm::MDNode:
[legend]

Public Types

using op_iterator = const MDOperand *
using op_range = iterator_range<op_iterator>

Public Member Functions

 MDNode (const MDNode &)=delete
void operator= (const MDNode &)=delete
void * operator new (size_t)=delete
LLVM_ABI TempMDNode clone () const
 Create a (temporary) clone of this.
LLVMContextgetContext () const
LLVM_ABI 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
bool isAlwaysReplaceable () const
bool hasGeneralizedMDString ()
 Check if this is a valid generalized type metadata node.
unsigned getNumTemporaryUses () const
void replaceAllUsesWith (Metadata *MD)
 RAUW a temporary.
LLVM_ABI void resolveCycles ()
 Resolve cycles.
LLVM_ABI void resolve ()
 Resolve a unique, unresolved node.
op_iterator op_begin () const
op_iterator op_end () const
ArrayRef< MDOperandoperands () const
const MDOperandgetOperand (unsigned I) const
unsigned getNumOperands () const
 Return number of MDNode operands.
LLVM_ABI bool isTBAAVtableAccess () const
 Check whether MDNode is a vtable access.
LLVM_ABI void printTree (raw_ostream &OS, const Module *M=nullptr) const
 Print in tree shape.
LLVM_ABI void printTree (raw_ostream &OS, ModuleSlotTracker &MST, const Module *M=nullptr) const
LLVM_ABI void dumpTree () const
 User-friendly dump in tree shape.
LLVM_ABI void dumpTree (const Module *M) const

Static Public Member Functions

static MDTupleget (LLVMContext &Context, ArrayRef< Metadata * > MDs)
static MDTuplegetIfExists (LLVMContext &Context, ArrayRef< Metadata * > MDs)
static MDTuplegetDistinct (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 MDNodeconcatenate (MDNode *A, MDNode *B)
 Methods for metadata merging.
static LLVM_ABI MDNodeintersect (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMostGenericTBAA (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMostGenericFPMath (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMostGenericRange (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMostGenericNoaliasAddrspace (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMostGenericAliasScope (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMostGenericAlignmentOrDereferenceable (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMergedProfMetadata (MDNode *A, MDNode *B, const Instruction *AInstr, const Instruction *BInstr)
 Merge !prof metadata from two instructions.
static LLVM_ABI MDNodegetMergedMemProfMetadata (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMergedCallsiteMetadata (MDNode *A, MDNode *B)
static LLVM_ABI MDNodegetMergedCalleeTypeMetadata (const MDNode *A, const MDNode *B)

Protected Types

using mutable_op_range = iterator_range<MDOperand *>
 Active type of storage. More...

Protected Member Functions

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 ()
MDOperandmutable_begin ()
MDOperandmutable_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.

Static Protected Member Functions

template<class T, class StoreT>
static TstoreImpl (T *N, StorageType Storage, StoreT &Store)
template<class T>
static TstoreImpl (T *N, StorageType Storage)

Friends

class ReplaceableMetadataImpl
class LLVMContextImpl
class DIAssignID

Additional Inherited Members

Detailed Description

Metadata node.

Metadata nodes can be uniqued, like constants, or distinct. Temporary metadata nodes (with full support for RAUW) can be used to delay uniquing until forward references are known. The basic metadata node is an MDTuple.

There is limited support for RAUW at construction time. At construction time, if any operand is a temporary node (or an unresolved uniqued node, which indicates a transitive temporary operand), the node itself will be unresolved. As soon as all operands become resolved, it will drop RAUW support permanently.

If an unresolved node is part of a cycle, resolveCycles() needs to be called on some member of the cycle once all temporary nodes have been replaced.

MDNodes can be large or small, as well as resizable or non-resizable. Large MDNodes' operands are allocated in a separate storage vector, whereas small MDNodes' operands are co-allocated. Distinct and temporary MDnodes are resizable, but only MDTuples support this capability.

Clients can add operands to resizable MDNodes using push_back().

Definition at line 1077 of file Metadata.h.

Member Typedef Documentation

◆ mutable_op_range

Definition at line 1213 of file Metadata.h.

◆ op_iterator

Definition at line 1432 of file Metadata.h.

◆ op_range

Definition at line 1433 of file Metadata.h.

Constructor & Destructor Documentation

◆ MDNode() [1/2]

◆ ~MDNode()

llvm::MDNode::~MDNode ( )
protecteddefault

◆ MDNode() [2/2]

llvm::MDNode::MDNode ( const MDNode & )
delete

References MDNode().

Member Function Documentation

◆ classof()

bool llvm::MDNode::classof ( const Metadata * MD)
inlinestatic

Methods for support type inquiry through isa, cast, and dyn_cast:

Definition at line 1454 of file Metadata.h.

References llvm::Metadata::getMetadataID(), and llvm::Metadata::Metadata().

◆ clone()

TempMDNode MDNode::clone ( ) const

Create a (temporary) clone of this.

Definition at line 668 of file Metadata.cpp.

References llvm::Metadata::getMetadataID(), and llvm_unreachable.

Referenced by llvm::DIType::clone(), cloneAndReplaceParentScope(), and updateSubprogramLinkageName().

◆ concatenate()

◆ deleteTemporary()

void MDNode::deleteTemporary ( MDNode * N)
static

Deallocate a node created by getTemporary.

Calls replaceAllUsesWith(nullptr) before deleting, so any remaining references will be reset.

Definition at line 1050 of file Metadata.cpp.

References assert(), MDNode(), and N.

Referenced by LLVMDisposeTemporaryMDNode(), LLVMMetadataReplaceAllUsesWith(), and llvm::TempMDNodeDeleter::operator()().

◆ dropAllReferences()

void MDNode::dropAllReferences ( )
protected

Definition at line 908 of file Metadata.cpp.

References getNumOperands(), I, and setOperand().

◆ dumpTree() [1/2]

LLVM_DUMP_METHOD void MDNode::dumpTree ( ) const

User-friendly dump in tree shape.

If M is provided, metadata nodes will be numbered canonically; otherwise, pointer addresses are substituted.

Note: this uses an explicit overload instead of default arguments so that the nullptr version is easy to call from a debugger.

Definition at line 5509 of file AsmWriter.cpp.

References dumpTree().

Referenced by dumpTree().

◆ dumpTree() [2/2]

LLVM_DUMP_METHOD void MDNode::dumpTree ( const Module * M) const

Definition at line 5512 of file AsmWriter.cpp.

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

◆ get()

MDTuple * llvm::MDNode::get ( LLVMContext & Context,
ArrayRef< Metadata * > MDs )
inlinestatic

Definition at line 1565 of file Metadata.h.

References llvm::MDTuple::get().

Referenced by llvm::adaptNoAliasScopes(), AddAliasScopeMetadata(), addModuleFlags(), addRuntimeUnrollDisableMetaData(), llvm::addStringMetadataToLoop(), llvm::annotateValueSite(), llvm::DIExpression::append(), llvm::DIExpression::appendOpsToArg(), llvm::memprof::CallStackTrie::buildAndAttachMIBMetadata(), llvm::SPIRVGlobalRegistry::buildAssignType(), llvm::memprof::buildCallstackMetadata(), buildFrameDebugInfo(), llvm::buildMD(), llvm::hlsl::rootsig::MetadataBuilder::BuildRootSignature(), canonicalizeMetadataForValue(), llvm::DILocation::cloneWithDiscriminator(), collectCallSiteParameters(), llvm::DIExpression::constantFold(), constructEntryMetadata(), llvm::DIExpression::convertToNonVariadicExpression(), llvm::DIExpression::convertToUndefExpression(), llvm::DIExpression::convertToVariadicExpression(), llvm::GlobalObject::copyMetadata(), llvm::copyRangeMetadata(), createAccessTag(), llvm::MDBuilder::createAliasScope(), llvm::MDBuilder::createAliasScopeDomain(), llvm::DIBuilder::createArrayType(), llvm::DIBuilder::createBasicType(), llvm::DIBuilder::createBinaryFixedPointType(), llvm::DIBuilder::createBitFieldMemberType(), llvm::DIBuilder::createBitFieldMemberType(), llvm::MDBuilder::createBranchWeights(), llvm::MDBuilder::createCallbackEncoding(), llvm::MDBuilder::createCallees(), llvm::DIBuilder::createClassType(), llvm::DIBuilder::createCommonBlock(), llvm::DIBuilder::createConstantValueExpression(), llvm::DIBuilder::createDecimalFixedPointType(), createDecorationIntrinsic(), llvm::SwiftErrorValueTracking::createEntriesInEntryBlock(), llvm::DIBuilder::createEnumerationType(), llvm::DIBuilder::createEnumerator(), llvm::DIBuilder::createEnumerator(), llvm::DIBuilder::createExpression(), CreateFailBB(), llvm::DIBuilder::createFile(), llvm::DIBuilder::createForwardDecl(), llvm::MDBuilder::createFPMath(), llvm::DIExpression::createFragmentExpression(), llvm::DIBuilder::createFriend(), llvm::MDBuilder::createFunctionEntryCount(), llvm::MDBuilder::createGlobalObjectSectionPrefix(), llvm::DIBuilder::createGlobalVariableExpression(), createImportedModule(), llvm::DIBuilder::createInheritance(), llvm::MDBuilder::createIrrLoopHeaderWeight(), llvm::DIBuilder::createLabel(), llvm::DIBuilder::createLexicalBlockFile(), llvm::MDBuilder::createLLVMStats(), createLocalVariable(), llvm::DIBuilder::createMacro(), llvm::DIBuilder::createMemberPointerType(), llvm::DIBuilder::createMemberType(), llvm::DIBuilder::createMemberType(), llvm::createMemCpyLoopKnownSize(), createMIBNode(), llvm::DIBuilder::createModule(), llvm::DIBuilder::createNameSpace(), llvm::DIBuilder::createObjCIVar(), llvm::DIBuilder::createObjCProperty(), createOrReplaceFragment(), llvm::MDBuilder::createPCSections(), llvm::createPGONameMetadata(), llvm::DIBuilder::createPointerType(), llvm::MDBuilder::createPseudoProbeDesc(), llvm::DIBuilder::createPtrAuthQualifiedType(), llvm::DIBuilder::createQualifiedType(), llvm::MDBuilder::createRange(), llvm::DIBuilder::createRationalFixedPointType(), llvm::DIBuilder::createReferenceType(), createRoundingModeDecoration(), llvm::MDBuilder::createRTTIPointerPrologue(), createSaturatedConversionDecoration(), llvm::DIBuilder::createSetType(), llvm::DIBuilder::createStaticMemberType(), createStringMetadata(), llvm::DIBuilder::createStringType(), llvm::DIBuilder::createStringType(), llvm::DIBuilder::createStringType(), llvm::DIBuilder::createStructType(), llvm::DIBuilder::createStructType(), llvm::DIBuilder::createSubrangeType(), llvm::DIBuilder::createSubroutineType(), llvm::MDBuilder::createTBAAAccessTag(), llvm::MDBuilder::createTBAANode(), llvm::MDBuilder::createTBAARoot(), llvm::MDBuilder::createTBAAScalarTypeNode(), llvm::MDBuilder::createTBAAStructNode(), llvm::MDBuilder::createTBAAStructTagNode(), llvm::MDBuilder::createTBAAStructTypeNode(), llvm::MDBuilder::createTBAATypeNode(), llvm::DIBuilder::createTemplateAlias(), llvm::DIBuilder::createTemplateTypeParameter(), createTemplateValueParameterHelper(), llvm::DIBuilder::createTypedef(), llvm::DIBuilder::createUnionType(), llvm::MDBuilder::createUnpredictable(), llvm::DIBuilder::createUnspecifiedType(), llvm::DIBuilder::createVariantMemberType(), llvm::DIBuilder::createVariantMemberType(), llvm::DIBuilder::createVariantPart(), llvm::DIBuilder::createVectorType(), llvm::MipsInstrInfo::describeLoadedValue(), llvm::TargetInstrInfo::describeLoadedValue(), llvm::X86InstrInfo::describeLoadedValue(), describeMOVrrLoadedValue(), describeORRLoadedValue(), DisableAllLoopOptsOnLoop(), dropInitialDeref(), llvm::Instruction::dropLocation(), llvm::embedBufferInModule(), llvm::emitAMDGPUPrintfCall(), emitAssignName(), emitDbgAssign(), emitDXILVersionTupleMD(), TransferTracker::emitMOLoc(), emitResourceMetadata(), emitShaderModelVersionMD(), emitTopLevelLibraryNode(), emitValidatorVersionMD(), llvm::InstrumentationIRBuilder::ensureDebugInfo(), llvm::AAMDNodes::extendToTBAA(), llvm::DIExpression::extractAddressClass(), extractMDNode(), llvm::DIBuilder::finalize(), findBasePointer(), FixupDebugInfoForOutlinedFunction(), fixupDebugInfoPostExtraction(), llvm::DIExpression::foldConstantMath(), llvm::TypedTrackingMDRef< MDNode >::get(), llvm::dxil::ResourceInfo::getAsMetadata(), llvm::getDebugValueLoc(), getEntryPropAsMetadata(), llvm::DebugLoc::getFnDebugLoc(), llvm::DbgLabelRecord::getLabel(), getMergedCalleeTypeMetadata(), llvm::DILocation::getMergedLocation(), getMostGenericNoaliasAddrspace(), getMostGenericRange(), llvm::LoopVersioning::getNoAliasMetadataFor(), llvm::offloading::getOffloadingEntryInitializer(), getOrCreateDebugLoc(), llvm::DIBuilder::getOrCreateGenericSubrange(), llvm::DIBuilder::getOrCreateSubrange(), llvm::DIBuilder::getOrCreateSubrange(), llvm::DIBuilder::getOrCreateSubrange(), llvm::DIBuilder::getOrCreateTypeArray(), getOrSelfReference(), getSubprogram(), llvm::DILocation::getWithoutAtom(), HandleByValArgumentInit(), hostParallelCallback(), llvm::FunctionImporter::importFunctions(), inlineDebugLoc(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::SampleProfileProber::instrumentOneFunc(), interpretValues(), llvm::intersectAccessGroups(), LLVMDIBuilderCreateDebugLocation(), LLVMMDNodeInContext(), LLVMMDNodeInContext2(), lowerKernelArguments(), lowerPtrAnnotation(), llvm::makeFollowupLoopID(), markLoadsAsInvariant(), llvm::MDBuilder::mergeCallbackEncodings(), migrateDebugInfo(), moveFunctionData(), parseAnnotation(), postUnswitch(), llvm::LoopVersioning::prepareNoAliasMetadata(), llvm::DIExpression::prependOpcodes(), llvm::SwiftErrorValueTracking::propagateVRegs(), llvm::memtag::readRegister(), llvm::RemapSourceAtom(), llvm::DIExpression::replaceArg(), llvm::DebugLoc::replaceInlinedAtSubprogram(), llvm::AssignGUIDPass::run(), runImpl(), runOnFunction(), llvm::scaleProfData(), llvm::LoopVectorizeHints::setAlreadyVectorized(), llvm::sandboxir::Region::setAux(), llvm::setExplicitlyUnknownBranchWeights(), llvm::setExplicitlyUnknownFunctionEntryCount(), llvm::setKCFIType(), llvm::Loop::setLoopAlreadyUnrolled(), llvm::Loop::setLoopMustProgress(), llvm::IRBuilderBase::SetNoSanitizeMetadata(), llvm::Instruction::setNoSanitizeMetadata(), llvm::GlobalObject::setVCallVisibilityMetadata(), llvm::AAMDNodes::shiftTBAAStruct(), shortenAssignment(), splitGlobal(), stripLoopMDLoc(), llvm::stripNonLineTableDebugInfo(), transferSRADebugInfo(), translateBranchMetadata(), TryToShrinkGlobalToBoolean(), llvm::uniteAccessGroups(), updateDVIWithLocation(), updateDVIWithLocations(), llvm::LoopVectorizationPlanner::updateLoopMetadataAndProfileInfo(), upgradeAMDGCNIntrinsicCall(), llvm::UpgradeModuleFlags(), llvm::UpgradeNVVMAnnotations(), upgradeNVVMIntrinsicCall(), llvm::UpgradeTBAANode(), upgradeX86IntrinsicCall(), and llvm::InstCombinerImpl::visitCallInst().

◆ getContext()

◆ getDistinct()

◆ getIfExists()

MDTuple * llvm::MDNode::getIfExists ( LLVMContext & Context,
ArrayRef< Metadata * > MDs )
inlinestatic

Definition at line 1569 of file Metadata.h.

References llvm::MDTuple::getIfExists().

◆ getMergedCalleeTypeMetadata()

MDNode * MDNode::getMergedCalleeTypeMetadata ( const MDNode * A,
const MDNode * B )
static

◆ getMergedCallsiteMetadata()

MDNode * MDNode::getMergedCallsiteMetadata ( MDNode * A,
MDNode * B )
static

Definition at line 594 of file MemoryProfileInfo.cpp.

References A(), B(), and MDNode().

Referenced by combineMetadata().

◆ getMergedMemProfMetadata()

MDNode * MDNode::getMergedMemProfMetadata ( MDNode * A,
MDNode * B )
static

Definition at line 585 of file MemoryProfileInfo.cpp.

References A(), B(), and MDNode().

Referenced by combineMetadata().

◆ getMergedProfMetadata()

MDNode * MDNode::getMergedProfMetadata ( MDNode * A,
MDNode * B,
const Instruction * AInstr,
const Instruction * BInstr )
static

Merge !prof metadata from two instructions.

Currently only implemented with direct callsites with branch weights.

Definition at line 1224 of file Metadata.cpp.

References A(), assert(), B(), llvm::dyn_cast(), llvm::CallBase::getCalledFunction(), llvm::Instruction::getMetadata(), I, and MDNode().

Referenced by combineMetadata().

◆ getMostGenericAliasScope()

◆ getMostGenericAlignmentOrDereferenceable()

MDNode * MDNode::getMostGenericAlignmentOrDereferenceable ( MDNode * A,
MDNode * B )
static

Definition at line 1434 of file Metadata.cpp.

References A(), B(), llvm::mdconst::extract(), llvm::ConstantInt::getZExtValue(), and MDNode().

Referenced by combineMetadata().

◆ getMostGenericFPMath()

MDNode * MDNode::getMostGenericFPMath ( MDNode * A,
MDNode * B )
static

◆ getMostGenericNoaliasAddrspace()

◆ getMostGenericRange()

◆ getMostGenericTBAA()

MDNode * MDNode::getMostGenericTBAA ( MDNode * A,
MDNode * B )
static

◆ getNumOperands()

unsigned llvm::MDNode::getNumOperands ( ) const
inline

Return number of MDNode operands.

Definition at line 1451 of file Metadata.h.

Referenced by llvm::AbstractCallSite::AbstractCallSite(), llvm::memprof::CallStackTrie::addCallStack(), addRuntimeUnrollDisableMetaData(), llvm::addStringMetadataToLoop(), addToAccessGroupList(), llvm::buildOpSpirvDecorations(), llvm::cacheAnnotationFromMD(), computeFunctionSummary(), createAccessTag(), dropAllReferences(), llvm::extractProfTotalWeight(), llvm::findOptionMDForLoopID(), llvm::findStringMetadataForLoop(), getConstInt(), llvm::DOTGraphTraits< DOTFuncInfo * >::getEdgeAttributes(), GetFunctionFromMDNode(), llvm::AMDGPUMachineFunction::getLDSKernelIdMetadata(), llvm::MachineInstr::getLocCookieMD(), llvm::Loop::getLoopID(), llvm::MachineLoop::getLoopID(), llvm::memprof::getMIBAllocType(), llvm::memprof::getMIBStackNode(), llvm::getNumBranchWeights(), llvm::GenericDINode::getNumDwarfOperands(), getOperand(), llvm::getOptionalBoolLoopAttribute(), llvm::SPIRVGlobalRegistry::getOrAddMemAliasingINTELInst(), llvm::DILocation::getRawInlinedAt(), getSummaryFromMD(), llvm::GetUnrollMetadata(), getValMD(), llvm::getValueProfDataFromInst(), hasGeneralizedMDString(), llvm::AMDGPU::hasValueInRangeLikeMetadata(), haveCommonPrefix(), llvm::intersectAccessGroups(), llvm::isExplicitlyUnknownProfileMetadata(), isKeyValuePair(), AliasScopeTracker::isNoAliasScopeDeclDead(), IsRootTBAANode(), IsScalarTBAANodeImpl(), isStructPathTBAA(), isTBAAVtableAccess(), llvm::SPIRVCallLowering::lowerFormalArguments(), llvm::makeFollowupLoopID(), llvm::mayHaveValueProfileOfKind(), llvm::MDBuilder::mergeCallbackEncodings(), llvm::MDTuple::pop_back(), propagateMemProfHelper(), llvm::MDTuple::push_back(), saveFilteredNewMIBNodes(), llvm::scaleProfData(), llvm::Loop::setLoopID(), setOperand(), llvm::AAMDNodes::shiftTBAAStruct(), translateBranchMetadata(), unrollAndJamCountPragmaValue(), unrollCountPragmaValue(), updateLoopMetadataDebugLocationsImpl(), llvm::UpgradeTBAANode(), and llvm::TBAAVerifier::visitTBAAMetadata().

◆ getNumTemporaryUses()

unsigned llvm::MDNode::getNumTemporaryUses ( ) const
inline

Definition at line 1273 of file Metadata.h.

References assert(), and isTemporary().

◆ getNumUnresolved()

unsigned llvm::MDNode::getNumUnresolved ( ) const
inlineprotected

Definition at line 1366 of file Metadata.h.

Referenced by isResolved(), and storeDistinctInContext().

◆ getOperand()

const MDOperand & llvm::MDNode::getOperand ( unsigned I) const
inline

Definition at line 1445 of file Metadata.h.

References assert(), getNumOperands(), and I.

Referenced by llvm::AbstractCallSite::AbstractCallSite(), AccessQualFromMD(), llvm::DwarfUnit::addAnnotation(), llvm::memprof::CallStackTrie::addCallStack(), addRuntimeUnrollDisableMetaData(), llvm::addStringMetadataToLoop(), ArgTypeFromMD(), llvm::buildOpSpirvDecorations(), llvm::cacheAnnotationFromMD(), llvm::cacheAnnotationFromMD(), llvm::MachineFunction::CallSiteInfo::CallSiteInfo(), computeFunctionSummary(), llvm::MDBuilder::createMutableTBAAAccessTag(), llvm::MachineInstr::emitInlineAsmError(), llvm::AsmPrinter::emitPCSections(), exportKernelRuntimeHandles(), llvm::extractProfTotalWeight(), llvm::findOptionMDForLoopID(), llvm::findStringMetadataForLoop(), foldConstantsIntoIntrinsics(), generateAssignInstrs(), GetArgMD(), llvm::AbstractCallSite::getCallbackUses(), getConstInt(), getCoopAtomicOperandsInfo(), llvm::GenericDINode::getDwarfOperand(), llvm::DOTGraphTraits< DOTFuncInfo * >::getEdgeAttributes(), getEnqueuedBlockSymbolName(), llvm::FPMathOperator::getFPAccuracy(), GetFunctionFromMDNode(), llvm::AMDGPUMachineFunction::getLDSKernelIdMetadata(), getLinkedToSymbol(), llvm::SelectionDAG::getLoad(), llvm::MachineInstr::getLocCookieMD(), llvm::Loop::getLoopID(), llvm::MachineLoop::getLoopID(), llvm::memprof::getMIBAllocType(), llvm::memprof::getMIBStackNode(), getOCLKernelArgAttribute(), llvm::DIMacroNode::getOperandAs(), llvm::DINode::getOperandAs(), llvm::getOptionalBoolLoopAttribute(), getOriginalFunctionType(), llvm::DICompositeType::getRawAllocated(), llvm::DICompositeType::getRawAnnotations(), llvm::DIDerivedType::getRawAnnotations(), llvm::DIGlobalVariable::getRawAnnotations(), llvm::DILocalVariable::getRawAnnotations(), llvm::DICompositeType::getRawAssociated(), llvm::DICompositeType::getRawBaseType(), llvm::DISubrangeType::getRawBaseType(), llvm::DISubrangeType::getRawBias(), llvm::DICompositeType::getRawBitStride(), llvm::DIGenericSubrange::getRawCountNode(), llvm::DICompositeType::getRawDataLocation(), llvm::DICommonBlock::getRawDecl(), llvm::DICompositeType::getRawDiscriminator(), llvm::DICompositeType::getRawElements(), llvm::DIMacroFile::getRawElements(), llvm::DICompileUnit::getRawEnumTypes(), llvm::DIGlobalVariableExpression::getRawExpression(), llvm::DIDerivedType::getRawExtraData(), llvm::DICommonBlock::getRawFile(), llvm::DILabel::getRawFile(), llvm::DIMacroFile::getRawFile(), llvm::DIObjCProperty::getRawFile(), llvm::DIScope::getRawFile(), llvm::DIVariable::getRawFile(), llvm::DICompileUnit::getRawGlobalVariables(), llvm::DICompileUnit::getRawImportedEntities(), llvm::DILocation::getRawInlinedAt(), llvm::DIGenericSubrange::getRawLowerBound(), llvm::DISubrangeType::getRawLowerBound(), llvm::DICompileUnit::getRawMacros(), llvm::DIType::getRawOffsetInBits(), llvm::DICompositeType::getRawRank(), llvm::DICompileUnit::getRawRetainedTypes(), llvm::DICommonBlock::getRawScope(), llvm::DILabel::getRawScope(), llvm::DILexicalBlockBase::getRawScope(), llvm::DILocation::getRawScope(), llvm::DINamespace::getRawScope(), llvm::DIType::getRawScope(), llvm::DIVariable::getRawScope(), llvm::DIType::getRawSizeInBits(), llvm::DICompositeType::getRawSpecification(), llvm::DIGlobalVariable::getRawStaticDataMemberDeclaration(), llvm::DIGenericSubrange::getRawStride(), llvm::DISubrangeType::getRawStride(), llvm::DIStringType::getRawStringLength(), llvm::DIStringType::getRawStringLengthExp(), llvm::DIStringType::getRawStringLocationExp(), llvm::DICompositeType::getRawTemplateParams(), llvm::DIGlobalVariable::getRawTemplateParams(), llvm::DIObjCProperty::getRawType(), llvm::DITemplateParameter::getRawType(), llvm::DIVariable::getRawType(), llvm::DISubroutineType::getRawTypeArray(), llvm::DIGenericSubrange::getRawUpperBound(), llvm::DISubrangeType::getRawUpperBound(), llvm::DIGlobalVariableExpression::getRawVariable(), llvm::DICompositeType::getRawVTableHolder(), getSummaryFromMD(), llvm::RISCVTargetLowering::getTargetMMOFlags(), llvm::GetUnrollMetadata(), getValMD(), llvm::DITemplateValueParameter::getValue(), llvm::getValueProfDataFromInst(), hasAnyUnrollPragma(), llvm::hasBranchWeightOrigin(), hasGeneralizedMDString(), llvm::AMDGPU::hasValueInRangeLikeMetadata(), llvm::isExplicitlyUnknownProfileMetadata(), isKeyValuePair(), AliasScopeTracker::isNoAliasScopeDeclDead(), IsScalarTBAANodeImpl(), isStructPathTBAA(), isTBAAVtableAccess(), llvm::lookupPGONameFromMetadata(), llvm::makeFollowupLoopID(), llvm::mayHaveValueProfileOfKind(), llvm::MDBuilder::mergeCallbackEncodings(), replaceOperandWith(), saveFilteredNewMIBNodes(), llvm::scaleProfData(), llvm::Loop::setLoopID(), llvm::AAMDNodes::shiftTBAAStruct(), translateBranchMetadata(), unrollAndJamCountPragmaValue(), unrollCountPragmaValue(), updateLoopMetadataDebugLocationsImpl(), llvm::UpgradeTBAANode(), and llvm::TBAAVerifier::visitTBAAMetadata().

◆ getTemporary()

◆ hasGeneralizedMDString()

bool llvm::MDNode::hasGeneralizedMDString ( )
inline

Check if this is a valid generalized type metadata node.

Definition at line 1267 of file Metadata.h.

References llvm::cast(), getNumOperands(), getOperand(), and llvm::isa().

◆ intersect()

◆ isAlwaysReplaceable()

bool llvm::MDNode::isAlwaysReplaceable ( ) const
inline

Definition at line 1264 of file Metadata.h.

References llvm::Metadata::getMetadataID().

Referenced by isReplaceable().

◆ isDistinct()

bool llvm::MDNode::isDistinct ( ) const
inline

Definition at line 1260 of file Metadata.h.

References llvm::Metadata::Distinct, and llvm::Metadata::Storage.

Referenced by llvm::DIType::mutate().

◆ isReplaceable()

bool llvm::MDNode::isReplaceable ( ) const
inline

Definition at line 1263 of file Metadata.h.

References isAlwaysReplaceable(), and isTemporary().

Referenced by replaceAllUsesWith().

◆ isResolved()

bool llvm::MDNode::isResolved ( ) const
inline

Check if node is fully resolved.

If isTemporary(), this always returns false; if isDistinct(), this always returns true.

If isUniqued(), returns true if this has already dropped RAUW support (because all operands are resolved).

As forward declarations are resolved, their containers should get resolved automatically. However, if this (or one of its operands) is involved in a cycle, resolveCycles() needs to be called explicitly.

Definition at line 1257 of file Metadata.h.

References getNumUnresolved(), and isTemporary().

Referenced by resolve(), resolveCycles(), and storeDistinctInContext().

◆ isTBAAVtableAccess()

bool MDNode::isTBAAVtableAccess ( ) const

Check whether MDNode is a vtable access.

Definition at line 454 of file TypeBasedAliasAnalysis.cpp.

References llvm::dyn_cast(), getNumOperands(), getOperand(), isStructPathTBAA(), and llvm::Tag.

◆ isTemporary()

◆ isUniqued()

bool llvm::MDNode::isUniqued ( ) const
inline

◆ mutable_begin()

MDOperand * llvm::MDNode::mutable_begin ( )
inlineprotected

Definition at line 1210 of file Metadata.h.

Referenced by mutable_operands(), op_begin(), replaceOperandWith(), and setOperand().

◆ mutable_end()

MDOperand * llvm::MDNode::mutable_end ( )
inlineprotected

Definition at line 1211 of file Metadata.h.

Referenced by mutable_operands(), and op_end().

◆ mutable_operands()

mutable_op_range llvm::MDNode::mutable_operands ( )
inlineprotected

Definition at line 1215 of file Metadata.h.

References mutable_begin(), and mutable_end().

◆ op_begin()

op_iterator llvm::MDNode::op_begin ( ) const
inline

Definition at line 1435 of file Metadata.h.

References MDNode(), and mutable_begin().

Referenced by llvm::GenericDINode::dwarf_op_begin(), and haveCommonPrefix().

◆ op_end()

op_iterator llvm::MDNode::op_end ( ) const
inline

Definition at line 1439 of file Metadata.h.

References MDNode(), and mutable_end().

Referenced by llvm::GenericDINode::dwarf_op_end(), and haveCommonPrefix().

◆ operands()

◆ operator delete() [1/3]

void llvm::MDNode::operator delete ( void * ,
unsigned  )
inlineprotected

Required by std, but never called.

Definition at line 1199 of file Metadata.h.

References llvm_unreachable.

◆ operator delete() [2/3]

void llvm::MDNode::operator delete ( void * ,
unsigned ,
bool  )
inlineprotected

Required by std, but never called.

Definition at line 1204 of file Metadata.h.

References llvm_unreachable.

◆ operator delete() [3/3]

void MDNode::operator delete ( void * Mem)
protected

Definition at line 644 of file Metadata.cpp.

References H, and N.

◆ operator new() [1/2]

void * MDNode::operator new ( size_t Size,
size_t NumOps,
StorageType Storage )
protected

◆ operator new() [2/2]

void * llvm::MDNode::operator new ( size_t )
delete

References LLVM_ABI, MDNode(), and N.

◆ operator=()

void llvm::MDNode::operator= ( const MDNode & )
delete

References MDNode().

◆ printTree() [1/2]

void MDNode::printTree ( raw_ostream & OS,
const Module * M = nullptr ) const

Print in tree shape.

Prints definition of this in tree shape.

If M is provided, metadata nodes will be numbered canonically; otherwise, pointer addresses are substituted.

Definition at line 5434 of file AsmWriter.cpp.

References printMetadataImpl().

Referenced by dumpTree().

◆ printTree() [2/2]

void MDNode::printTree ( raw_ostream & OS,
ModuleSlotTracker & MST,
const Module * M = nullptr ) const

Definition at line 5440 of file AsmWriter.cpp.

References printMetadataImpl().

◆ replaceAllUsesWith()

void llvm::MDNode::replaceAllUsesWith ( Metadata * MD)
inline

RAUW a temporary.

Precondition
isTemporary() must be true.

Definition at line 1281 of file Metadata.h.

References assert(), isReplaceable(), and llvm::Metadata::Metadata().

Referenced by llvm::at::RAUW().

◆ replaceOperandWith()

◆ replaceWithDistinct()

template<class T>
std::enable_if_t< std::is_base_of< MDNode, T >::value, T * > llvm::MDNode::replaceWithDistinct ( std::unique_ptr< T, TempMDNodeDeleter > N)
inlinestatic

Replace a temporary node with a distinct one.

Create a distinct version of N – in place, if possible – and return it. Takes ownership of the temporary node.

Definition at line 1326 of file Metadata.h.

References llvm::cast(), and N.

Referenced by llvm::DIBuilder::createArtificialSubprogram().

◆ replaceWithPermanent()

template<class T>
std::enable_if_t< std::is_base_of< MDNode, T >::value, T * > llvm::MDNode::replaceWithPermanent ( std::unique_ptr< T, TempMDNodeDeleter > N)
inlinestatic

Replace a temporary node with a permanent one.

Try to create a uniqued version of N – in place, if possible – and return it. If N cannot be uniqued, return a distinct node instead.

Definition at line 1304 of file Metadata.h.

References llvm::cast(), and N.

◆ replaceWithUniqued()

template<class T>
std::enable_if_t< std::is_base_of< MDNode, T >::value, T * > llvm::MDNode::replaceWithUniqued ( std::unique_ptr< T, TempMDNodeDeleter > N)
inlinestatic

Replace a temporary node with a uniqued one.

Create a uniqued version of N – in place, if possible – and return it. Takes ownership of the temporary node.

Precondition
N does not self-reference.

Definition at line 1316 of file Metadata.h.

References llvm::cast(), and N.

Referenced by cloneAndReplaceParentScope(), llvm::coro::BaseCloner::create(), createTypeWithFlags(), llvm::DIBuilder::replaceTemporary(), and updateSubprogramLinkageName().

◆ resize()

void llvm::MDNode::resize ( size_t NumOps)
inlineprotected

Resize the node to hold NumOps operands.

Precondition
isTemporary() or isDistinct()
MetadataID == MDTupleKind

Definition at line 1378 of file Metadata.h.

References AbstractManglingParser< Derived, Alloc >::NumOps, assert(), llvm::Metadata::getMetadataID(), and isUniqued().

Referenced by llvm::MDTuple::pop_back(), and llvm::MDTuple::push_back().

◆ resolve()

void MDNode::resolve ( )

Resolve a unique, unresolved node.

Definition at line 796 of file Metadata.cpp.

References assert(), isResolved(), isUniqued(), and setNumUnresolved().

Referenced by resolveCycles().

◆ resolveCycles()

void MDNode::resolveCycles ( )

Resolve cycles.

Once all forward declarations have been resolved, force cycles to be resolved.

Precondition
No operands (or operands' operands, etc.) have isTemporary().

Definition at line 842 of file Metadata.cpp.

References assert(), llvm::dyn_cast_or_null(), isResolved(), N, operands(), and resolve().

◆ setNumUnresolved()

void llvm::MDNode::setNumUnresolved ( unsigned N)
inlineprotected

Definition at line 1368 of file Metadata.h.

References N.

Referenced by resolve().

◆ setOperand()

void MDNode::setOperand ( unsigned I,
Metadata * New )
protected

Set an operand.

Sets the operand directly, without worrying about uniquing.

Definition at line 1090 of file Metadata.cpp.

References assert(), getNumOperands(), I, isUniqued(), llvm::Metadata::Metadata(), mutable_begin(), and llvm::MDOperand::reset().

Referenced by dropAllReferences(), MDNode(), llvm::MDTuple::push_back(), replaceOperandWith(), and llvm::DILexicalBlockBase::replaceScope().

◆ storeDistinctInContext()

◆ storeImpl() [1/2]

template<class T>
T * llvm::MDNode::storeImpl ( T * N,
StorageType Storage )
staticprotected

◆ storeImpl() [2/2]

template<class T, class StoreT>
T * llvm::MDNode::storeImpl ( T * N,
StorageType Storage,
StoreT & Store )
staticprotected

◆ DIAssignID

friend class DIAssignID
friend

Definition at line 1080 of file Metadata.h.

References AbstractManglingParser< Derived, Alloc >::NumOps, and DIAssignID.

Referenced by DIAssignID.

◆ LLVMContextImpl

friend class LLVMContextImpl
friend

Definition at line 1079 of file Metadata.h.

References LLVMContextImpl.

Referenced by LLVMContextImpl.

◆ ReplaceableMetadataImpl

friend class ReplaceableMetadataImpl
friend

Definition at line 1078 of file Metadata.h.

References ReplaceableMetadataImpl.

Referenced by ReplaceableMetadataImpl.


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