From 5b8c4401003f6eb597d0dc42f6e38e41f83306c7 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 llvm-svn: 226499 --- llvm/include/llvm/IR/Metadata.h | 2 ++ llvm/lib/IR/Metadata.cpp | 48 +++++++++++++++++------------------------ 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/llvm/include/llvm/IR/Metadata.h b/llvm/include/llvm/IR/Metadata.h index 8cbd1df..bbbb328 100644 --- a/llvm/include/llvm/IR/Metadata.h +++ b/llvm/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/llvm/lib/IR/Metadata.cpp b/llvm/lib/IR/Metadata.cpp index 6513c9a..8d83e16 100644 --- a/llvm/lib/IR/Metadata.cpp +++ b/llvm/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.7.4