diff options
author | Bill Wendling <isanbard@gmail.com> | 2010-09-14 20:59:01 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2010-09-14 20:59:01 +0000 |
commit | 139d4669f1c34105b54e268a100511807c8ed063 (patch) | |
tree | c980bbc389be4b5374d90e35a77bcb01240d6cbd /lib/VMCore/Metadata.cpp | |
parent | 02bf305a3f5879eddcb4bd1f3917e021349fc0c0 (diff) |
Approved by Chris:
$ svn merge -c 113557 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113557 into '.':
U include/llvm/Bitcode/LLVMBitCodes.h
U tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
U lib/Bitcode/Reader/BitcodeReader.cpp
U lib/Bitcode/Writer/BitcodeWriter.cpp
$ svn merge -c 113764 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113764 into '.':
U lib/Bitcode/Reader/BitcodeReader.h
G lib/Bitcode/Reader/BitcodeReader.cpp
$ svn merge -c 113828 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113828 into '.':
U lib/VMCore/Metadata.cpp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113853 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Metadata.cpp')
-rw-r--r-- | lib/VMCore/Metadata.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index b9f97dbf60..da69c43ff7 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -354,6 +354,22 @@ void MDNode::replaceOperand(MDNodeOperand *Op, Value *To) { // InsertPoint will have been set by the FindNodeOrInsertPos call. pImpl->MDNodeSet.InsertNode(this, InsertPoint); + + // If this MDValue was previously function-local but no longer is, clear + // its function-local flag. + if (isFunctionLocal() && !isFunctionLocalValue(To)) { + bool isStillFunctionLocal = false; + for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { + Value *V = getOperand(i); + if (!V) continue; + if (isFunctionLocalValue(V)) { + isStillFunctionLocal = true; + break; + } + } + if (!isStillFunctionLocal) + setValueSubclassData(getSubclassDataFromValue() & ~FunctionLocalBit); + } } //===----------------------------------------------------------------------===// @@ -387,6 +403,8 @@ MDNode *NamedMDNode::getOperand(unsigned i) const { /// addOperand - Add metadata Operand. void NamedMDNode::addOperand(MDNode *M) { + assert(!M->isFunctionLocal() && + "NamedMDNode operands must not be function-local!"); getNMDOps(Operands).push_back(TrackingVH<MDNode>(M)); } |