IR: Extract out and reuse storeImpl(), NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226499 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith 2015-01-19 20:18:13 +00:00
parent 1c588db19b
commit e5afc6570f
2 changed files with 22 additions and 28 deletions

View File

@ -820,6 +820,8 @@ protected:
~UniquableMDNode() {}
void storeDistinctInContext();
template <class T, class StoreT>
static T *storeImpl(T *N, StorageType Storage, StoreT &Store);
public:
static bool classof(const Metadata *MD) {

View File

@ -611,6 +611,21 @@ static T *getUniqued(DenseSet<T *, InfoT> &Store,
return I == Store.end() ? nullptr : *I;
}
template <class T, class StoreT>
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<Metadata *> MDs,
StorageType Storage, bool ShouldCreate) {
unsigned Hash = 0;
@ -625,20 +640,8 @@ MDTuple *MDTuple::getImpl(LLVMContext &Context, ArrayRef<Metadata *> 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() {