summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-10-31 23:58:04 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-10-31 23:58:04 +0000
commit7c4fc4e5ae4c8145974397da295587e77c770f62 (patch)
tree23d6a00e47af9c5ba087c0aba2539af47efcc466 /llvm
parentada6d1693e540a54e9e50c24791985f1486d2f43 (diff)
downloadbcm5719-llvm-7c4fc4e5ae4c8145974397da295587e77c770f62.tar.gz
bcm5719-llvm-7c4fc4e5ae4c8145974397da295587e77c770f62.zip
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
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/IR/Instruction.h20
-rw-r--r--llvm/lib/IR/Metadata.cpp8
2 files changed, 28 insertions, 0 deletions
diff --git a/llvm/include/llvm/IR/Instruction.h b/llvm/include/llvm/IR/Instruction.h
index 4baacba78ed..ac042ff7ba9 100644
--- a/llvm/include/llvm/IR/Instruction.h
+++ b/llvm/include/llvm/IR/Instruction.h
@@ -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;
diff --git a/llvm/lib/IR/Metadata.cpp b/llvm/lib/IR/Metadata.cpp
index 3d869e87c4d..60cd2fc9061 100644
--- a/llvm/lib/IR/Metadata.cpp
+++ b/llvm/lib/IR/Metadata.cpp
@@ -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());
OpenPOWER on IntegriCloud