Add `Instruction::getMDNode()` that casts to `MDNode` before changing
`Instruction::getMetadata()` to return `Value`. This avoids adding
`cast_or_null<MDNode>` boiler-plate throughout the code.
Part of PR21433.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221023
91177308-0d34-0410-b5e6-
96231b3b80d8
return getMetadataImpl(Kind);
}
return getMetadataImpl(Kind);
}
+ /// Get the the metadata as an MDNode.
+ ///
+ /// \pre Any KindID metadata is implemented using \a MDNode.
+ MDNode *getMDNode(unsigned KindID) const {
+ if (!hasMetadata())
+ return nullptr;
+ return getMDNodeImpl(KindID);
+ }
+
+ /// Get the the metadata as an MDNode.
+ ///
+ /// \pre Any KindID metadata is implemented using \a MDNode.
+ MDNode *getMDNode(StringRef Kind) const {
+ if (!hasMetadata())
+ return nullptr;
+ return getMDNodeImpl(Kind);
+ }
+
/// getAllMetadata - Get all metadata attached to this Instruction. The first
/// element of each pair returned is the KindID, the second element is the
/// metadata value. This list is returned sorted by the KindID.
/// getAllMetadata - Get all metadata attached to this Instruction. The first
/// element of each pair returned is the KindID, the second element is the
/// metadata value. This list is returned sorted by the KindID.
// These are all implemented in Metadata.cpp.
MDNode *getMetadataImpl(unsigned KindID) const;
MDNode *getMetadataImpl(StringRef Kind) const;
// These are all implemented in Metadata.cpp.
MDNode *getMetadataImpl(unsigned KindID) const;
MDNode *getMetadataImpl(StringRef Kind) const;
+ MDNode *getMDNodeImpl(unsigned KindID) const;
+ MDNode *getMDNodeImpl(StringRef Kind) const;
void getAllMetadataImpl(SmallVectorImpl<std::pair<unsigned,MDNode*> > &)const;
void getAllMetadataOtherThanDebugLocImpl(SmallVectorImpl<std::pair<unsigned,
MDNode*> > &) const;
void getAllMetadataImpl(SmallVectorImpl<std::pair<unsigned,MDNode*> > &)const;
void getAllMetadataOtherThanDebugLocImpl(SmallVectorImpl<std::pair<unsigned,
MDNode*> > &) const;
return getMetadataImpl(getContext().getMDKindID(Kind));
}
return getMetadataImpl(getContext().getMDKindID(Kind));
}
+MDNode *Instruction::getMDNodeImpl(unsigned KindID) const {
+ return getMetadataImpl(KindID);
+}
+
+MDNode *Instruction::getMDNodeImpl(StringRef Kind) const {
+ return getMetadataImpl(Kind);
+}
+
void Instruction::dropUnknownMetadata(ArrayRef<unsigned> KnownIDs) {
SmallSet<unsigned, 5> KnownSet;
KnownSet.insert(KnownIDs.begin(), KnownIDs.end());
void Instruction::dropUnknownMetadata(ArrayRef<unsigned> KnownIDs) {
SmallSet<unsigned, 5> KnownSet;
KnownSet.insert(KnownIDs.begin(), KnownIDs.end());