diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-19 21:30:18 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-19 21:30:18 +0000 |
| commit | 7d82313bcd972be7a125dd9448a807eb100a520d (patch) | |
| tree | 8963ef3187d3133f675a578956bb6ed8ea19b2bb /llvm/lib/Transforms | |
| parent | 2658554aeca02328bcd0ee9ca80d902e0a107563 (diff) | |
| download | bcm5719-llvm-7d82313bcd972be7a125dd9448a807eb100a520d.tar.gz bcm5719-llvm-7d82313bcd972be7a125dd9448a807eb100a520d.zip | |
IR: Return unique_ptr from MDNode::getTemporary()
Change `MDTuple::getTemporary()` and `MDLocation::getTemporary()` to
return (effectively) `std::unique_ptr<T, MDNode::deleteTemporary>`, 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
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Utils/InlineFunction.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/ValueMapper.cpp | 11 |
2 files changed, 7 insertions, 15 deletions
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<MDTuple *, 16> DummyNodes; + SmallVector<TempMDTuple, 16> DummyNodes; DenseMap<const MDNode *, TrackingMDNodeRef> MDMap; for (SetVector<const MDNode *>::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<Metadata *>(static_cast<const Metadata *>(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); } |

