IR: MDNode => Value: Add Instruction::getMDNode()

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.

llvm-svn: 221023
This commit is contained in:
Duncan P. N. Exon Smith 2014-10-31 23:58:04 +00:00
parent ada6d1693e
commit 7c4fc4e5ae
2 changed files with 28 additions and 0 deletions

View File

@ -153,6 +153,24 @@ public:
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.
@ -273,6 +291,8 @@ private:
// 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;

View File

@ -609,6 +609,14 @@ MDNode *Instruction::getMetadataImpl(StringRef Kind) const {
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());