From e5afc6570f4354e42c60cf77de18ba070a114b53 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Mon, 19 Jan 2015 20:18:13 +0000 Subject: [PATCH] IR: Extract out and reuse `storeImpl()`, NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226499 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Metadata.h | 2 ++ lib/IR/Metadata.cpp | 48 ++++++++++++++++---------------------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/include/llvm/IR/Metadata.h b/include/llvm/IR/Metadata.h index 8cbd1df9dcb..bbbb328890f 100644 --- a/include/llvm/IR/Metadata.h +++ b/include/llvm/IR/Metadata.h @@ -820,6 +820,8 @@ protected: ~UniquableMDNode() {} void storeDistinctInContext(); + template + static T *storeImpl(T *N, StorageType Storage, StoreT &Store); public: static bool classof(const Metadata *MD) { diff --git a/lib/IR/Metadata.cpp b/lib/IR/Metadata.cpp index 6513c9a23d2..8d83e1652cd 100644 --- a/lib/IR/Metadata.cpp +++ b/lib/IR/Metadata.cpp @@ -611,6 +611,21 @@ static T *getUniqued(DenseSet &Store, return I == Store.end() ? nullptr : *I; } +template +T *UniquableMDNode::storeImpl(T *N, StorageType Storage, StoreT &Store) { + switch (Storage) { + case Uniqued: + Store.insert(N); + break; + case Distinct: + N->storeDistinctInContext(); + break; + case Temporary: + llvm_unreachable("Unexpected temporary node"); + } + return N; +} + MDTuple *MDTuple::getImpl(LLVMContext &Context, ArrayRef MDs, StorageType Storage, bool ShouldCreate) { unsigned Hash = 0; @@ -625,20 +640,8 @@ MDTuple *MDTuple::getImpl(LLVMContext &Context, ArrayRef MDs, assert(ShouldCreate && "Expected non-uniqued nodes to always be created"); } - auto *N = new (MDs.size()) MDTuple(Context, Storage, Hash, MDs); - - switch (Storage) { - case Uniqued: - Context.pImpl->MDTuples.insert(N); - break; - case Distinct: - N->storeDistinctInContext(); - break; - case Temporary: - llvm_unreachable("Unexpected temporary node"); - } - - return N; + return storeImpl(new (MDs.size()) MDTuple(Context, Storage, Hash, MDs), + Storage, Context.pImpl->MDTuples); } MDTuple *MDTuple::uniquifyImpl() { @@ -702,20 +705,9 @@ MDLocation *MDLocation::getImpl(LLVMContext &Context, unsigned Line, Ops.push_back(Scope); if (InlinedAt) Ops.push_back(InlinedAt); - auto *N = new (Ops.size()) MDLocation(Context, Storage, Line, Column, Ops); - - switch (Storage) { - case Uniqued: - Context.pImpl->MDLocations.insert(N); - break; - case Distinct: - N->storeDistinctInContext(); - break; - case Temporary: - llvm_unreachable("Unexpected temporary node"); - } - - return N; + return storeImpl(new (Ops.size()) + MDLocation(Context, Storage, Line, Column, Ops), + Storage, Context.pImpl->MDLocations); } MDLocation *MDLocation::uniquifyImpl() { -- 2.34.1