mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
Replace a use of ConstantUniqueMap for CAZ constants with a simple DenseMap.
Now that the type system rewrite has landed, there is no need for its complexity and std::map'ness. llvm-svn: 148691
This commit is contained in:
parent
0a21f75290
commit
395d1616b3
@ -993,18 +993,33 @@ bool ConstantFP::isValueValidForType(Type *Ty, const APFloat& Val) {
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Factory Function Implementation
|
||||
|
||||
ConstantAggregateZero* ConstantAggregateZero::get(Type* Ty) {
|
||||
ConstantAggregateZero *ConstantAggregateZero::get(Type *Ty) {
|
||||
assert((Ty->isStructTy() || Ty->isArrayTy() || Ty->isVectorTy()) &&
|
||||
"Cannot create an aggregate zero of non-aggregate type!");
|
||||
|
||||
LLVMContextImpl *pImpl = Ty->getContext().pImpl;
|
||||
return pImpl->AggZeroConstants.getOrCreate(Ty, 0);
|
||||
OwningPtr<ConstantAggregateZero> &Entry =
|
||||
Ty->getContext().pImpl->CAZConstants[Ty];
|
||||
if (Entry == 0)
|
||||
Entry.reset(new ConstantAggregateZero(Ty));
|
||||
|
||||
return Entry.get();
|
||||
}
|
||||
|
||||
/// destroyConstant - Remove the constant from the constant table...
|
||||
///
|
||||
void ConstantAggregateZero::destroyConstant() {
|
||||
getType()->getContext().pImpl->AggZeroConstants.remove(this);
|
||||
// Drop ownership of the CAZ object before removing the entry so that it
|
||||
// doesn't get double deleted.
|
||||
LLVMContextImpl::CAZMapTy &CAZConstants = getContext().pImpl->CAZConstants;
|
||||
LLVMContextImpl::CAZMapTy::iterator I = CAZConstants.find(getType());
|
||||
assert(I != CAZConstants.end() && "CAZ object not in uniquing map");
|
||||
I->second.take();
|
||||
|
||||
// Actually remove the entry from the DenseMap now, which won't free the
|
||||
// constant.
|
||||
CAZConstants.erase(I);
|
||||
|
||||
// Free the constant and any dangling references to it.
|
||||
destroyConstantImpl();
|
||||
}
|
||||
|
||||
|
@ -477,13 +477,6 @@ struct ConstantKeyData<ConstantExpr> {
|
||||
}
|
||||
};
|
||||
|
||||
// ConstantAggregateZero does not take extra "value" argument...
|
||||
template<class ValType>
|
||||
struct ConstantCreator<ConstantAggregateZero, Type, ValType> {
|
||||
static ConstantAggregateZero *create(Type *Ty, const ValType &V){
|
||||
return new ConstantAggregateZero(Ty);
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ConstantKeyData<ConstantVector> {
|
||||
@ -497,14 +490,6 @@ struct ConstantKeyData<ConstantVector> {
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ConstantKeyData<ConstantAggregateZero> {
|
||||
typedef char ValType;
|
||||
static ValType getValType(ConstantAggregateZero *C) {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ConstantKeyData<ConstantArray> {
|
||||
typedef std::vector<Constant*> ValType;
|
||||
|
@ -70,7 +70,7 @@ LLVMContextImpl::~LLVMContextImpl() {
|
||||
ArrayConstants.freeConstants();
|
||||
StructConstants.freeConstants();
|
||||
VectorConstants.freeConstants();
|
||||
AggZeroConstants.freeConstants();
|
||||
CAZConstants.clear();
|
||||
NullPtrConstants.freeConstants();
|
||||
UndefValueConstants.freeConstants();
|
||||
InlineAsms.freeConstants();
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/FoldingSet.h"
|
||||
#include "llvm/ADT/OwningPtr.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include <vector>
|
||||
@ -138,7 +139,8 @@ public:
|
||||
// on Context destruction.
|
||||
SmallPtrSet<MDNode*, 1> NonUniquedMDNodes;
|
||||
|
||||
ConstantUniqueMap<char, char, Type, ConstantAggregateZero> AggZeroConstants;
|
||||
typedef DenseMap<Type*, OwningPtr<ConstantAggregateZero> > CAZMapTy;
|
||||
CAZMapTy CAZConstants;
|
||||
|
||||
typedef ConstantUniqueMap<std::vector<Constant*>, ArrayRef<Constant*>,
|
||||
ArrayType, ConstantArray, true /*largekey*/> ArrayConstantsTy;
|
||||
|
Loading…
Reference in New Issue
Block a user