IR: Simplify uniquifyImpl(), NFC

llvm-svn: 226518
This commit is contained in:
Duncan P. N. Exon Smith 2015-01-19 22:52:07 +00:00
parent 6cf10d2786
commit f9d1bc9919
2 changed files with 27 additions and 33 deletions

View File

@ -956,9 +956,6 @@ public:
static bool classof(const Metadata *MD) {
return MD->getMetadataID() == MDTupleKind;
}
private:
MDTuple *uniquifyImpl();
};
MDTuple *MDNode::get(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
@ -1033,9 +1030,6 @@ public:
static bool classof(const Metadata *MD) {
return MD->getMetadataID() == MDLocationKind;
}
private:
MDLocation *uniquifyImpl();
};
//===----------------------------------------------------------------------===//

View File

@ -614,13 +614,39 @@ void UniquableMDNode::deleteAsSubclass() {
}
}
template <class T, class InfoT>
static T *getUniqued(DenseSet<T *, InfoT> &Store,
const typename InfoT::KeyTy &Key) {
auto I = Store.find_as(Key);
return I == Store.end() ? nullptr : *I;
}
template <class T, class InfoT>
static T *uniquifyImpl(T *N, DenseSet<T *, InfoT> &Store) {
if (T *U = getUniqued(Store, N))
return U;
Store.insert(N);
return N;
}
UniquableMDNode *UniquableMDNode::uniquify() {
// Recalculate hash, if necessary.
switch (getMetadataID()) {
default:
break;
case MDTupleKind:
cast<MDTuple>(this)->recalculateHash();
break;
}
// Try to insert into uniquing store.
switch (getMetadataID()) {
default:
llvm_unreachable("Invalid subclass of UniquableMDNode");
#define HANDLE_UNIQUABLE_LEAF(CLASS) \
case CLASS##Kind: \
return cast<CLASS>(this)->uniquifyImpl();
return uniquifyImpl(cast<CLASS>(this), getContext().pImpl->CLASS##s);
#include "llvm/IR/Metadata.def"
}
}
@ -637,13 +663,6 @@ void UniquableMDNode::eraseFromStore() {
}
}
template <class T, class InfoT>
static T *getUniqued(DenseSet<T *, InfoT> &Store,
const typename InfoT::KeyTy &Key) {
auto I = Store.find_as(Key);
return I == Store.end() ? nullptr : *I;
}
template <class T, class StoreT>
T *UniquableMDNode::storeImpl(T *N, StorageType Storage, StoreT &Store) {
switch (Storage) {
@ -677,16 +696,6 @@ MDTuple *MDTuple::getImpl(LLVMContext &Context, ArrayRef<Metadata *> MDs,
Storage, Context.pImpl->MDTuples);
}
MDTuple *MDTuple::uniquifyImpl() {
recalculateHash();
auto &Store = getContext().pImpl->MDTuples;
if (MDTuple *N = getUniqued(Store, this))
return N;
Store.insert(this);
return this;
}
MDLocation::MDLocation(LLVMContext &C, StorageType Storage, unsigned Line,
unsigned Column, ArrayRef<Metadata *> MDs)
: UniquableMDNode(C, MDLocationKind, Storage, MDs) {
@ -741,15 +750,6 @@ MDLocation *MDLocation::getImpl(LLVMContext &Context, unsigned Line,
Storage, Context.pImpl->MDLocations);
}
MDLocation *MDLocation::uniquifyImpl() {
auto &Store = getContext().pImpl->MDLocations;
if (MDLocation *N = getUniqued(Store, this))
return N;
Store.insert(this);
return this;
}
void MDNode::deleteTemporary(MDNode *N) {
assert(N->isTemporary() && "Expected temporary node");
cast<UniquableMDNode>(N)->deleteAsSubclass();