From 7d82313bcd972be7a125dd9448a807eb100a520d Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Mon, 19 Jan 2015 21:30:18 +0000 Subject: IR: Return unique_ptr from MDNode::getTemporary() Change `MDTuple::getTemporary()` and `MDLocation::getTemporary()` to return (effectively) `std::unique_ptr`, and clean up call sites. (For now, `DIBuilder` call sites just call `release()` immediately.) There's an accompanying change in each of clang and polly to use the new API. llvm-svn: 226504 --- llvm/lib/Transforms/Utils/InlineFunction.cpp | 11 +++-------- llvm/lib/Transforms/Utils/ValueMapper.cpp | 11 ++++------- 2 files changed, 7 insertions(+), 15 deletions(-) (limited to 'llvm/lib/Transforms/Utils') diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp index 3cebd232984..f14afdb78cb 100644 --- a/llvm/lib/Transforms/Utils/InlineFunction.cpp +++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp @@ -319,13 +319,12 @@ static void CloneAliasScopeMetadata(CallSite CS, ValueToValueMapTy &VMap) { // Now we have a complete set of all metadata in the chains used to specify // the noalias scopes and the lists of those scopes. - SmallVector DummyNodes; + SmallVector DummyNodes; DenseMap MDMap; for (SetVector::iterator I = MD.begin(), IE = MD.end(); I != IE; ++I) { - MDTuple *Dummy = MDTuple::getTemporary(CalledFunc->getContext(), None); - DummyNodes.push_back(Dummy); - MDMap[*I].reset(Dummy); + DummyNodes.push_back(MDTuple::getTemporary(CalledFunc->getContext(), None)); + MDMap[*I].reset(DummyNodes.back().get()); } // Create new metadata nodes to replace the dummy nodes, replacing old @@ -389,10 +388,6 @@ static void CloneAliasScopeMetadata(CallSite CS, ValueToValueMapTy &VMap) { NI->setMetadata(LLVMContext::MD_noalias, M); } } - - // Now that everything has been replaced, delete the dummy nodes. - for (unsigned i = 0, ie = DummyNodes.size(); i != ie; ++i) - MDNode::deleteTemporary(DummyNodes[i]); } /// AddAliasScopeMetadata - If the inlined function has noalias arguments, then diff --git a/llvm/lib/Transforms/Utils/ValueMapper.cpp b/llvm/lib/Transforms/Utils/ValueMapper.cpp index b195c6349b7..528bf373fff 100644 --- a/llvm/lib/Transforms/Utils/ValueMapper.cpp +++ b/llvm/lib/Transforms/Utils/ValueMapper.cpp @@ -249,12 +249,11 @@ static Metadata *mapDistinctNode(const UniquableMDNode *Node, // In general we need a dummy node, since whether the operands are null can // affect the size of the node. - MDTuple *Dummy = MDTuple::getTemporary(Node->getContext(), None); - mapToMetadata(VM, Node, Dummy); + auto Dummy = MDTuple::getTemporary(Node->getContext(), None); + mapToMetadata(VM, Node, Dummy.get()); Metadata *NewMD = cloneMDNode(Node, VM, Flags, TypeMapper, Materializer, /* IsDistinct */ true); Dummy->replaceAllUsesWith(NewMD); - MDNode::deleteTemporary(Dummy); return mapToMetadata(VM, Node, NewMD); } @@ -285,14 +284,13 @@ static Metadata *mapUniquedNode(const UniquableMDNode *Node, assert(Node->isUniqued() && "Expected uniqued node"); // Create a dummy node in case we have a metadata cycle. - MDTuple *Dummy = MDTuple::getTemporary(Node->getContext(), None); - mapToMetadata(VM, Node, Dummy); + auto Dummy = MDTuple::getTemporary(Node->getContext(), None); + mapToMetadata(VM, Node, Dummy.get()); // Check all operands to see if any need to be remapped. if (!shouldRemapUniquedNode(Node, VM, Flags, TypeMapper, Materializer)) { // Use an identity mapping. mapToSelf(VM, Node); - MDNode::deleteTemporary(Dummy); return const_cast(static_cast(Node)); } @@ -300,7 +298,6 @@ static Metadata *mapUniquedNode(const UniquableMDNode *Node, Metadata *NewMD = cloneMDNode(Node, VM, Flags, TypeMapper, Materializer, /* IsDistinct */ false); Dummy->replaceAllUsesWith(NewMD); - MDNode::deleteTemporary(Dummy); return mapToMetadata(VM, Node, NewMD); } -- cgit v1.2.3