diff --git a/include/llvm/Metadata.h b/include/llvm/Metadata.h index 54af723b92f..7977c820846 100644 --- a/include/llvm/Metadata.h +++ b/include/llvm/Metadata.h @@ -185,31 +185,26 @@ class NamedMDNode : public MetadataBase, public ilist_node { friend class LLVMContextImpl; Module *Parent; - StringRef Name; SmallVector Node; typedef SmallVectorImpl::iterator elem_iterator; protected: - explicit NamedMDNode(const char *N, unsigned NameLength, - MetadataBase*const* Vals, unsigned NumVals, - Module *M = 0); + explicit NamedMDNode(const Twine &N, MetadataBase*const* Vals, + unsigned NumVals, Module *M = 0); public: - static NamedMDNode *Create(const char *N, unsigned NamedLength, - MetadataBase*const*MDs, unsigned NumMDs, - Module *M = 0) { - return new NamedMDNode(N, NamedLength, MDs, NumMDs, M); + static NamedMDNode *Create(const Twine &N, MetadataBase*const*MDs, + unsigned NumMDs, Module *M = 0) { + return new NamedMDNode(N, MDs, NumMDs, M); } typedef SmallVectorImpl::const_iterator const_elem_iterator; - StringRef getName() const { return Name; } - /// getParent - Get the module that holds this named metadata collection. inline Module *getParent() { return Parent; } inline const Module *getParent() const { return Parent; } void setParent(Module *M) { Parent = M; } - Value *getElement(unsigned i) const { + MetadataBase *getElement(unsigned i) const { return Node[i]; } diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 2a2192c2a57..8b3b832cb69 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -440,8 +440,7 @@ bool LLParser::ParseNamedMetadata() { if (ParseToken(lltok::rbrace, "expected end of metadata node")) return true; - NamedMDNode::Create(Name.c_str(), Name.length(), - Elts.data(), Elts.size(), M); + NamedMDNode::Create(Name, Elts.data(), Elts.size(), M); return false; } diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index 2f6c153a9d7..cb1dd6553a9 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -33,15 +33,12 @@ void MDNode::Profile(FoldingSetNodeID &ID) const { //===----------------------------------------------------------------------===// //NamedMDNode implementation // -NamedMDNode::NamedMDNode(const char *N, unsigned NameLength, - MetadataBase*const* MDs, unsigned NumMDs, - Module *M) - : MetadataBase(Type::MetadataTy, Value::NamedMDNodeVal), - Name(N, NameLength) { +NamedMDNode::NamedMDNode(const Twine &N, MetadataBase*const* MDs, + unsigned NumMDs, Module *ParentModule) + : MetadataBase(Type::MetadataTy, Value::NamedMDNodeVal) { setName(N); for (unsigned i = 0; i != NumMDs; ++i) Node.push_back(WeakMetadataVH(MDs[i])); - - if (M) - M->getNamedMDList().push_back(this); + if (ParentModule) + ParentModule->getNamedMDList().push_back(this); }