diff options
author | Dan Gohman <gohman@apple.com> | 2010-07-21 23:38:33 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-07-21 23:38:33 +0000 |
commit | 17aa92c92a925b4a674440c7ef088c223990e854 (patch) | |
tree | bc129644ee9db39dc25a41c22ce01b14ede5728f /lib/VMCore/Metadata.cpp | |
parent | fcbd1a749f9db4bf144a3343c4d707e1de087a7e (diff) | |
download | external_llvm-17aa92c92a925b4a674440c7ef088c223990e854.tar.gz external_llvm-17aa92c92a925b4a674440c7ef088c223990e854.tar.bz2 external_llvm-17aa92c92a925b4a674440c7ef088c223990e854.zip |
Make NamedMDNode not be a subclass of Value, and simplify the interface
for creating and populating NamedMDNodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109061 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Metadata.cpp')
-rw-r--r-- | lib/VMCore/Metadata.cpp | 61 |
1 files changed, 4 insertions, 57 deletions
diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index cc4a68ec41..442b5c51b6 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -330,50 +330,13 @@ void MDNode::replaceOperand(MDNodeOperand *Op, Value *To) { // NamedMDNode implementation. // -// SymbolTableListTraits specialization for MDSymbolTable. -void ilist_traits<NamedMDNode>::addNodeToList(NamedMDNode *N) { - assert(N->getParent() == 0 && "Value already in a container!!"); - Module *Owner = getListOwner(); - N->setParent(Owner); - MDSymbolTable &ST = Owner->getMDSymbolTable(); - ST.insert(N->getName(), N); -} - -void ilist_traits<NamedMDNode>::removeNodeFromList(NamedMDNode *N) { - N->setParent(0); - Module *Owner = getListOwner(); - MDSymbolTable &ST = Owner->getMDSymbolTable(); - ST.remove(N->getName()); -} - static SmallVector<TrackingVH<MDNode>, 4> &getNMDOps(void *Operands) { return *(SmallVector<TrackingVH<MDNode>, 4>*)Operands; } -NamedMDNode::NamedMDNode(LLVMContext &C, const Twine &N, - MDNode *const *MDs, - unsigned NumMDs, Module *ParentModule) - : Value(Type::getMetadataTy(C), Value::NamedMDNodeVal), Parent(0) { - setName(N); - Operands = new SmallVector<TrackingVH<MDNode>, 4>(); - - SmallVector<TrackingVH<MDNode>, 4> &Node = getNMDOps(Operands); - for (unsigned i = 0; i != NumMDs; ++i) - Node.push_back(TrackingVH<MDNode>(MDs[i])); - - if (ParentModule) - ParentModule->getNamedMDList().push_back(this); -} - -NamedMDNode *NamedMDNode::Create(const NamedMDNode *NMD, Module *M) { - assert(NMD && "Invalid source NamedMDNode!"); - SmallVector<MDNode *, 4> Elems; - Elems.reserve(NMD->getNumOperands()); - - for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) - Elems.push_back(NMD->getOperand(i)); - return new NamedMDNode(NMD->getContext(), NMD->getName().data(), - Elems.data(), Elems.size(), M); +NamedMDNode::NamedMDNode(const Twine &N) + : Name(N.str()), Parent(0), + Operands(new SmallVector<TrackingVH<MDNode>, 4>()) { } NamedMDNode::~NamedMDNode() { @@ -400,7 +363,7 @@ void NamedMDNode::addOperand(MDNode *M) { /// eraseFromParent - Drop all references and remove the node from parent /// module. void NamedMDNode::eraseFromParent() { - getParent()->getNamedMDList().erase(this); + getParent()->eraseNamedMetadata(this); } /// dropAllReferences - Remove all uses and clear node vector. @@ -408,22 +371,6 @@ void NamedMDNode::dropAllReferences() { getNMDOps(Operands).clear(); } -/// setName - Set the name of this named metadata. -void NamedMDNode::setName(const Twine &NewName) { - assert (!NewName.isTriviallyEmpty() && "Invalid named metadata name!"); - - SmallString<256> NameData; - StringRef NameRef = NewName.toStringRef(NameData); - - // Name isn't changing? - if (getName() == NameRef) - return; - - Name = NameRef.str(); - if (Parent) - Parent->getMDSymbolTable().insert(NameRef, this); -} - /// getName - Return a constant reference to this named metadata's name. StringRef NamedMDNode::getName() const { return StringRef(Name); |