summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/lib/IR/Metadata.cpp
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2015-02-14 14:13:00 +0000
committerdim <dim@FreeBSD.org>2015-02-14 14:13:00 +0000
commit9377b5ad0feb5dd018ed6cfc6378ac19c1252dfe (patch)
treea7bc5b362ad6182396e88b223352f75d52966813 /contrib/llvm/lib/IR/Metadata.cpp
parentff34755926ad8a77e4498e82a23c847d33c6c72d (diff)
downloadFreeBSD-src-9377b5ad0feb5dd018ed6cfc6378ac19c1252dfe.zip
FreeBSD-src-9377b5ad0feb5dd018ed6cfc6378ac19c1252dfe.tar.gz
Merge llvm 3.6.0rc3 from ^/vendor/llvm/dist, merge clang 3.6.0rc3 from
^/vendor/clang/dist, resolve conflicts, and update patches README.
Diffstat (limited to 'contrib/llvm/lib/IR/Metadata.cpp')
-rw-r--r--contrib/llvm/lib/IR/Metadata.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/contrib/llvm/lib/IR/Metadata.cpp b/contrib/llvm/lib/IR/Metadata.cpp
index 2c6b332..63e5730 100644
--- a/contrib/llvm/lib/IR/Metadata.cpp
+++ b/contrib/llvm/lib/IR/Metadata.cpp
@@ -826,6 +826,28 @@ MDNode *MDNode::intersect(MDNode *A, MDNode *B) {
return getOrSelfReference(A->getContext(), MDs);
}
+MDNode *MDNode::getMostGenericAliasScope(MDNode *A, MDNode *B) {
+ if (!A || !B)
+ return nullptr;
+
+ SmallVector<Metadata *, 4> MDs(B->op_begin(), B->op_end());
+ for (unsigned i = 0, ie = A->getNumOperands(); i != ie; ++i) {
+ Metadata *MD = A->getOperand(i);
+ bool insert = true;
+ for (unsigned j = 0, je = B->getNumOperands(); j != je; ++j)
+ if (MD == B->getOperand(j)) {
+ insert = false;
+ break;
+ }
+ if (insert)
+ MDs.push_back(MD);
+ }
+
+ // FIXME: This preserves long-standing behaviour, but is it really the right
+ // behaviour? Or was that an unintended side-effect of node uniquing?
+ return getOrSelfReference(A->getContext(), MDs);
+}
+
MDNode *MDNode::getMostGenericFPMath(MDNode *A, MDNode *B) {
if (!A || !B)
return nullptr;
OpenPOWER on IntegriCloud