|
LLVM
3.7.0
|
#include <Metadata.h>
Classes | |
| struct | HasCachedHash |
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) |
| static TempMDTuple | getTemporary (LLVMContext &Context, ArrayRef< Metadata * > MDs) |
| static void | deleteTemporary (MDNode *N) |
| Deallocate a node created by getTemporary. More... | |
| template<class T > | |
| static std::enable_if < std::is_base_of< MDNode, T > ::value, T * >::type | replaceWithPermanent (std::unique_ptr< T, TempMDNodeDeleter > N) |
| Replace a temporary node with a permanent one. More... | |
| template<class T > | |
| static std::enable_if < std::is_base_of< MDNode, T > ::value, T * >::type | replaceWithUniqued (std::unique_ptr< T, TempMDNodeDeleter > N) |
| Replace a temporary node with a uniqued one. More... | |
| template<class T > | |
| static std::enable_if < std::is_base_of< MDNode, T > ::value, T * >::type | replaceWithDistinct (std::unique_ptr< T, TempMDNodeDeleter > N) |
| Replace a temporary node with a distinct one. More... | |
| static bool | classof (const Metadata *MD) |
| Methods for support type inquiry through isa, cast, and dyn_cast: More... | |
| static MDNode * | concatenate (MDNode *A, MDNode *B) |
| Methods for metadata merging. More... | |
| 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) |
Protected Types | |
| typedef iterator_range < MDOperand * > | mutable_op_range |
Protected Types inherited from llvm::Metadata | |
| enum | StorageType { Uniqued, Distinct, Temporary } |
| Active type of storage. More... | |
Protected Member Functions | |
| void * | operator new (size_t Size, unsigned NumOps) |
| void | operator delete (void *Mem) |
| void | operator delete (void *, unsigned) |
| Required by std, but never called. More... | |
| void | operator delete (void *, unsigned, bool) |
| Required by std, but never called. More... | |
| MDNode (LLVMContext &Context, unsigned ID, StorageType Storage, ArrayRef< Metadata * > Ops1, ArrayRef< Metadata * > Ops2=None) | |
| ~MDNode ()=default | |
| void | dropAllReferences () |
| MDOperand * | mutable_begin () |
| MDOperand * | mutable_end () |
| mutable_op_range | mutable_operands () |
| void | setOperand (unsigned I, Metadata *New) |
| Set an operand. More... | |
| void | storeDistinctInContext () |
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. More... | |
Static Protected Member Functions | |
| template<class T , class StoreT > | |
| static T * | storeImpl (T *N, StorageType Storage, StoreT &Store) |
Protected Attributes | |
| ContextAndReplaceableUses | Context |
Protected Attributes inherited from llvm::Metadata | |
| unsigned | Storage: 2 |
| Storage flag for non-uniqued, otherwise unowned, metadata. More... | |
| unsigned short | SubclassData16 |
| unsigned | SubclassData32 |
Friends | |
| class | ReplaceableMetadataImpl |
| class | LLVMContextImpl |
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.
Definition at line 740 of file Metadata.h.
|
protected |
Definition at line 776 of file Metadata.h.
| typedef const MDOperand* llvm::MDNode::op_iterator |
Definition at line 925 of file Metadata.h.
Definition at line 926 of file Metadata.h.
|
protected |
Definition at line 415 of file Metadata.cpp.
References isDistinct(), isUniqued(), and setOperand().
|
protecteddefault |
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition at line 945 of file Metadata.h.
References llvm::Metadata::getMetadataID().
| TempMDNode MDNode::clone | ( | ) | const |
Create a (temporary) clone of this.
Definition at line 437 of file Metadata.cpp.
References llvm::Metadata::getMetadataID(), and llvm_unreachable.
Referenced by llvm::DIType::clone(), mapDistinctNode(), and mapUniquedNode().
Methods for metadata merging.
Definition at line 780 of file Metadata.cpp.
References llvm::ARM_PROC::A, llvm::SmallVectorImpl< T >::append(), getContext(), getNumOperands(), getOrSelfReference(), op_begin(), op_end(), and llvm::SmallVectorImpl< T >::reserve().
Referenced by AddAliasScopeMetadata(), and CloneAliasScopeMetadata().
|
static |
Deallocate a node created by getTemporary.
Calls replaceAllUsesWith(nullptr) before deleting, so any remaining references will be reset.
Definition at line 717 of file Metadata.cpp.
References isTemporary(), and replaceAllUsesWith().
Referenced by llvm::TempMDNodeDeleter::operator()().
|
protected |
Definition at line 577 of file Metadata.cpp.
References I, isResolved(), and setOperand().
|
inlinestatic |
Definition at line 1030 of file Metadata.h.
References llvm::MDTuple::get().
Referenced by AddAliasScopeMetadata(), llvm::Module::addModuleFlag(), canonicalizeMetadataForValue(), CloneAliasScopeMetadata(), CloneLoopBlocks(), llvm::MDBuilder::createAliasScope(), llvm::MDBuilder::createAliasScopeDomain(), llvm::MDBuilder::createAnonymousAARoot(), llvm::DIBuilder::createArrayType(), llvm::DIBuilder::createBasicType(), llvm::DIBuilder::createBitPieceExpression(), llvm::MDBuilder::createBranchWeights(), llvm::DIBuilder::createClassType(), llvm::DIBuilder::createCompileUnit(), llvm::DIBuilder::createEnumerationType(), llvm::DIBuilder::createEnumerator(), llvm::DIBuilder::createExpression(), llvm::DIBuilder::createFile(), llvm::DIBuilder::createForwardDecl(), llvm::MDBuilder::createFPMath(), llvm::DIBuilder::createFriend(), llvm::DIBuilder::createFunction(), llvm::MDBuilder::createFunctionEntryCount(), llvm::DIBuilder::createGlobalVariable(), createImportedModule(), llvm::DIBuilder::createInheritance(), llvm::DIBuilder::createLexicalBlockFile(), llvm::DIBuilder::createLocalVariable(), llvm::DIBuilder::createMemberPointerType(), llvm::DIBuilder::createMemberType(), llvm::DIBuilder::createMethod(), llvm::DIBuilder::createModule(), llvm::DIBuilder::createNameSpace(), llvm::DIBuilder::createObjCIVar(), llvm::DIBuilder::createObjCProperty(), llvm::DIBuilder::createPointerType(), llvm::DIBuilder::createQualifiedType(), llvm::MDBuilder::createRange(), llvm::DIBuilder::createReferenceType(), llvm::DIBuilder::createStaticMemberType(), llvm::DIBuilder::createStructType(), llvm::DIBuilder::createSubroutineType(), llvm::MDBuilder::createTBAANode(), llvm::MDBuilder::createTBAARoot(), llvm::MDBuilder::createTBAAScalarTypeNode(), llvm::MDBuilder::createTBAAStructNode(), llvm::MDBuilder::createTBAAStructTagNode(), llvm::MDBuilder::createTBAAStructTypeNode(), llvm::DIBuilder::createTemplateParameterPack(), llvm::DIBuilder::createTemplateTypeParameter(), createTemplateValueParameterHelper(), llvm::DIBuilder::createTypedef(), llvm::DIBuilder::createUnionType(), llvm::DIBuilder::createUnspecifiedType(), llvm::DIBuilder::createVectorType(), llvm::SystemZFrameLowering::emitPrologue(), extractMDNode(), findBasePointer(), llvm::DebugLoc::get(), getMostGenericRange(), getMostGenericTBAA(), llvm::DIBuilder::getOrCreateSubrange(), llvm::DIBuilder::getOrCreateTypeArray(), getOrSelfReference(), LLVMMDNodeInContext(), mapUniquedNode(), llvm::DIBuilder::replaceTemporary(), SetLoopAlreadyUnrolled(), llvm::BranchInst::swapSuccessors(), llvm::UpgradeIntrinsicCall(), llvm::InstCombiner::visitCallInst(), and WriteDISubprogram().
|
inline |
Definition at line 799 of file Metadata.h.
References Context, and llvm::ContextAndReplaceableUses::getContext().
Referenced by AddOperand(), llvm::DILocation::computeNewDiscriminator(), concatenate(), fixupLineNumbers(), llvm::DebugLoc::get(), getMostGenericAliasScope(), getMostGenericRange(), getMostGenericTBAA(), intersect(), printExtendedName(), and storeDistinctInContext().
|
inlinestatic |
Definition at line 1036 of file Metadata.h.
References llvm::MDTuple::getDistinct().
Referenced by llvm::DIBuilder::createCompileUnit(), llvm::DIBuilder::createLexicalBlock(), fixupLineNumbers(), and updateInlinedAtInfo().
|
inlinestatic |
Definition at line 1033 of file Metadata.h.
References llvm::MDTuple::getIfExists().
Definition at line 810 of file Metadata.cpp.
References getContext(), getOrSelfReference(), op_begin(), op_end(), and operands().
Referenced by llvm::combineMetadata(), and llvm::Instruction::getAAMetadata().
Definition at line 824 of file Metadata.cpp.
References llvm::APFloat::cmpLessThan, llvm::APFloat::compare(), and getOperand().
Referenced by llvm::combineMetadata().
Definition at line 872 of file Metadata.cpp.
References llvm::ARM_PROC::A, addRange(), llvm::ConstantAsMetadata::get(), get(), getContext(), getNumOperands(), getOperand(), llvm::ConstantInt::getValue(), I, llvm::ConstantRange::isFullSet(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SmallVectorImpl< T >::reserve(), llvm::SmallVectorImpl< T >::resize(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::APInt::slt(), and tryMergeRange().
Referenced by llvm::combineMetadata().
Definition at line 567 of file TypeBasedAliasAnalysis.cpp.
References llvm::ARM_PROC::A, llvm::SetVector< T, SmallVector< T, N >, SmallSet< T, N > >::count(), llvm::IntegerType::get(), llvm::ConstantInt::get(), llvm::ConstantAsMetadata::get(), get(), getContext(), getNumOperands(), getOperand(), llvm::SetVector< T, SmallVector< T, N >, SmallSet< T, N > >::insert(), llvm::Int64, isStructPathTBAA(), llvm::report_fatal_error(), llvm::MipsISD::Ret, and llvm::SetVector< T, SmallVector< T, N >, SmallSet< T, N > >::size().
Referenced by llvm::combineMetadata(), and llvm::Instruction::getAAMetadata().
|
inline |
Return number of MDNode operands.
Definition at line 942 of file Metadata.h.
Referenced by llvm::Module::addModuleFlag(), cacheAnnotationFromMD(), CloneAliasScopeMetadata(), CloneLoopBlocks(), llvm::computeKnownBitsFromRangeMetadata(), concatenate(), llvm::ConstantFoldTerminator(), llvm::MachineInstr::emitError(), llvm::TargetLoweringObjectFileMachO::emitModuleFlags(), llvm::TargetLoweringObjectFileCOFF::emitModuleFlags(), GetBranchWeights(), llvm::Loop::getLoopID(), getMostGenericRange(), getMostGenericTBAA(), llvm::GenericDINode::getNumDwarfOperands(), llvm::DILocation::getRawInlinedAt(), llvm::GetUnrollMetadata(), llvm::Loop::isAnnotatedParallel(), isStructPathTBAA(), isTBAAVtableAccess(), rangeMetadataExcludesValue(), remap(), SetLoopAlreadyUnrolled(), llvm::Loop::setLoopID(), llvm::DITypeRefArray::size(), UnrollCountPragmaValue(), llvm::UpgradeInstWithTBAATag(), and WriteMDTuple().
Definition at line 936 of file Metadata.h.
References I, and op_begin().
Referenced by llvm::Module::addModuleFlag(), cacheAnnotationFromMD(), CloneAliasScopeMetadata(), CloneLoopBlocks(), llvm::computeKnownBitsFromRangeMetadata(), llvm::ConstantFoldTerminator(), llvm::SystemZFrameLowering::emitEpilogue(), llvm::MachineInstr::emitError(), llvm::TargetLoweringObjectFileMachO::emitModuleFlags(), llvm::TargetLoweringObjectFileCOFF::emitModuleFlags(), llvm::HexagonInstrInfo::expandPostRAPseudo(), GetBranchWeights(), llvm::GenericDINode::getDwarfOperand(), llvm::Function::getEntryCount(), llvm::FPMathOperator::getFPAccuracy(), llvm::Loop::getLoopID(), getMDNodeOperandImpl(), getMostGenericFPMath(), getMostGenericRange(), getMostGenericTBAA(), llvm::DINode::getOperandAs(), llvm::DIDerivedTypeBase::getRawBaseType(), llvm::DICompositeTypeBase::getRawElements(), llvm::DIImportedEntity::getRawEntity(), llvm::DICompileUnit::getRawEnumTypes(), llvm::DIScope::getRawFile(), llvm::DIVariable::getRawFile(), llvm::DIObjCProperty::getRawFile(), llvm::DICompileUnit::getRawGlobalVariables(), llvm::DICompileUnit::getRawImportedEntities(), llvm::DILocation::getRawInlinedAt(), llvm::DICompileUnit::getRawRetainedTypes(), llvm::DIType::getRawScope(), llvm::DILocation::getRawScope(), llvm::DILexicalBlockBase::getRawScope(), llvm::DINamespace::getRawScope(), llvm::DIModule::getRawScope(), llvm::DIVariable::getRawScope(), llvm::DIImportedEntity::getRawScope(), llvm::DIGlobalVariable::getRawStaticDataMemberDeclaration(), llvm::DICompileUnit::getRawSubprograms(), llvm::DICompositeTypeBase::getRawTemplateParams(), llvm::DITemplateParameter::getRawType(), llvm::DIVariable::getRawType(), llvm::DIObjCProperty::getRawType(), llvm::DIGlobalVariable::getRawVariable(), llvm::DICompositeTypeBase::getRawVTableHolder(), llvm::GetUnrollMetadata(), llvm::DITemplateValueParameter::getValue(), HasBranchWeights(), llvm::Loop::isAnnotatedParallel(), isStructPathTBAA(), isTBAAVtableAccess(), llvm::DITypeRefArray::operator[](), rangeMetadataExcludesValue(), remap(), replaceOperandWith(), SetLoopAlreadyUnrolled(), llvm::Loop::setLoopID(), UnrollCountPragmaValue(), llvm::UpgradeInstWithTBAATag(), and WriteMDTuple().
|
inlinestatic |
Definition at line 1039 of file Metadata.h.
References llvm::MDTuple::getTemporary().
Referenced by llvm::MDBuilder::createAnonymousAARoot(), llvm::DIBuilder::createReplaceableCompositeType(), llvm::DIBuilder::createTempFunctionFwdDecl(), and llvm::DIBuilder::createTempGlobalVariableFwdDecl().
Definition at line 796 of file Metadata.cpp.
References getContext(), getOrSelfReference(), op_begin(), op_end(), operands(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
Referenced by llvm::combineMetadata(), and llvm::Instruction::getAAMetadata().
|
inline |
Definition at line 818 of file Metadata.h.
References llvm::Metadata::Distinct, and llvm::Metadata::Storage.
Referenced by mapDistinctNode(), MapMetadataImpl(), MDNode(), WriteDIBasicType(), WriteDICompileUnit(), WriteDICompositeType(), WriteDIDerivedType(), WriteDIEnumerator(), WriteDIExpression(), WriteDIFile(), WriteDIGlobalVariable(), WriteDIImportedEntity(), WriteDILexicalBlock(), WriteDILexicalBlockFile(), WriteDILocalVariable(), WriteDILocation(), WriteDIModule(), WriteDINamespace(), WriteDIObjCProperty(), WriteDISubprogram(), WriteDISubrange(), WriteDISubroutineType(), WriteDITemplateTypeParameter(), WriteDITemplateValueParameter(), WriteGenericDINode(), and WriteMDTuple().
|
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 815 of file Metadata.h.
References Context, and llvm::ContextAndReplaceableUses::hasReplaceableUses().
Referenced by dropAllReferences(), llvm::DIBuilder::finalize(), llvm::LexicalScope::LexicalScope(), mapDistinctNode(), MapMetadataImpl(), remap(), replaceAllUsesWith(), llvm::DIBuilder::replaceArrays(), llvm::DIBuilder::replaceVTableHolder(), resolveCycles(), and storeDistinctInContext().
| bool MDNode::isTBAAVtableAccess | ( | ) | const |
Check whether MDNode is a vtable access.
Definition at line 548 of file TypeBasedAliasAnalysis.cpp.
References getNumOperands(), getOperand(), and isStructPathTBAA().
|
inline |
Definition at line 819 of file Metadata.h.
References llvm::Metadata::Storage, and llvm::Metadata::Temporary.
Referenced by deleteTemporary(), and replaceAllUsesWith().
|
inline |
Definition at line 817 of file Metadata.h.
References llvm::Metadata::Storage, and llvm::Metadata::Uniqued.
Referenced by mapUniquedNode(), MDNode(), remap(), replaceOperandWith(), llvm::DIType::setFlags(), and setOperand().
|
inlineprotected |
Definition at line 773 of file Metadata.h.
References mutable_end().
Referenced by mutable_operands(), op_begin(), replaceOperandWith(), and setOperand().
|
inlineprotected |
Definition at line 774 of file Metadata.h.
Referenced by mutable_begin(), mutable_operands(), and op_end().
|
inlineprotected |
Definition at line 777 of file Metadata.h.
References mutable_begin(), and mutable_end().
|
inline |
Definition at line 928 of file Metadata.h.
References mutable_begin().
Referenced by llvm::DITypeRefArray::begin(), llvm::MDNodeOpsKey::calculateHash(), concatenate(), llvm::GenericDINode::dwarf_op_begin(), getMostGenericAliasScope(), getOperand(), intersect(), and operands().
|
inline |
Definition at line 931 of file Metadata.h.
References mutable_end().
Referenced by llvm::MDNodeOpsKey::calculateHash(), concatenate(), llvm::GenericDINode::dwarf_op_end(), llvm::DITypeRefArray::end(), getMostGenericAliasScope(), intersect(), and operands().
|
inline |
Definition at line 934 of file Metadata.h.
References op_begin(), and op_end().
Referenced by getMostGenericAliasScope(), hasSelfReference(), intersect(), isValidMetadataArrayImpl(), llvm::DIBuilder::replaceVTableHolder(), resolveCycles(), WriteDIModule(), and WriteGenericDINode().
|
protected |
Definition at line 404 of file Metadata.cpp.
References N, and llvm::RoundUpToAlignment().
|
inlineprotected |
Required by std, but never called.
Definition at line 758 of file Metadata.h.
References llvm_unreachable.
Required by std, but never called.
Definition at line 763 of file Metadata.h.
References llvm_unreachable.
|
protected |
Definition at line 392 of file Metadata.cpp.
References llvm::RoundUpToAlignment().
|
inline |
RAUW a temporary.
true. Definition at line 824 of file Metadata.h.
References Context, llvm::ContextAndReplaceableUses::getReplaceableUses(), isResolved(), isTemporary(), and llvm::ReplaceableMetadataImpl::replaceAllUsesWith().
Referenced by CloneAliasScopeMetadata(), deleteTemporary(), and llvm::DIBuilder::replaceTemporary().
Replace a specific operand.
Definition at line 743 of file Metadata.cpp.
References getOperand(), isUniqued(), mutable_begin(), and setOperand().
Referenced by CloneLoopBlocks(), llvm::MDBuilder::createAnonymousAARoot(), remap(), llvm::GenericDINode::replaceDwarfOperandWith(), llvm::DICompositeTypeBase::replaceElements(), llvm::DICompileUnit::replaceEnumTypes(), llvm::DISubprogram::replaceFunction(), llvm::DICompileUnit::replaceGlobalVariables(), llvm::DICompileUnit::replaceImportedEntities(), llvm::DICompileUnit::replaceRetainedTypes(), llvm::DICompileUnit::replaceSubprograms(), llvm::DICompositeTypeBase::replaceTemplateParams(), llvm::DICompositeTypeBase::replaceVTableHolder(), and SetLoopAlreadyUnrolled().
|
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 866 of file Metadata.h.
Referenced by mapDistinctNode().
|
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 844 of file Metadata.h.
|
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.
Definition at line 856 of file Metadata.h.
Referenced by createTypeWithFlags(), mapUniquedNode(), and llvm::DIBuilder::replaceTemporary().
| void MDNode::resolveCycles | ( | ) |
Resolve cycles.
Once all forward declarations have been resolved, force cycles to be resolved.
Definition at line 520 of file Metadata.cpp.
References isResolved(), N, and operands().
Referenced by llvm::DIBuilder::finalize().
Set an operand.
Sets the operand directly, without worrying about uniquing.
Definition at line 755 of file Metadata.cpp.
References I, isUniqued(), mutable_begin(), and llvm::MDOperand::reset().
Referenced by dropAllReferences(), MDNode(), and replaceOperandWith().
|
protected |
Definition at line 723 of file Metadata.cpp.
References llvm::Metadata::Distinct, llvm::LLVMContextImpl::DistinctMDNodes, getContext(), llvm::Metadata::getMetadataID(), isResolved(), llvm_unreachable, and llvm::LLVMContext::pImpl.
|
staticprotected |
Definition at line 30 of file MetadataImpl.h.
References llvm::Metadata::Distinct, N, llvm::Metadata::Temporary, and llvm::Metadata::Uniqued.
|
friend |
Definition at line 742 of file Metadata.h.
|
friend |
Definition at line 741 of file Metadata.h.
|
protected |
Definition at line 752 of file Metadata.h.
Referenced by llvm::MDTuple::get(), getContext(), isResolved(), and replaceAllUsesWith().
1.8.6