forked from OSchip/llvm-project
parent
6cf10d2786
commit
f9d1bc9919
|
@ -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();
|
||||
};
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue