Privatize the VectorType uniquing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78125 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson 2009-08-04 23:47:44 +00:00
parent 020e9ab052
commit 9eb5c93d34
2 changed files with 9 additions and 6 deletions

View File

@ -129,6 +129,7 @@ struct LLVMContextImpl {
ConstantInt *TheFalseVal;
TypeMap<ArrayValType, ArrayType> ArrayTypes;
TypeMap<VectorValType, VectorType> VectorTypes;
LLVMContextImpl() : TheTrueVal(0), TheFalseVal(0) { }
};

View File

@ -818,19 +818,19 @@ bool ArrayType::isValidElementType(const Type *ElemTy) {
return true;
}
static ManagedStatic<TypeMap<VectorValType, VectorType> > VectorTypes;
VectorType *VectorType::get(const Type *ElementType, unsigned NumElements) {
assert(ElementType && "Can't get vector of <null> types!");
VectorValType PVT(ElementType, NumElements);
VectorType *PT = 0;
LLVMContextImpl *pImpl = ElementType->getContext().pImpl;
sys::SmartScopedLock<true> L(*TypeMapLock);
PT = VectorTypes->get(PVT);
PT = pImpl->VectorTypes.get(PVT);
if (!PT) {
VectorTypes->add(PVT, PT = new VectorType(ElementType, NumElements));
pImpl->VectorTypes.add(PVT, PT = new VectorType(ElementType, NumElements));
}
#ifdef DEBUG_MERGE_TYPES
DOUT << "Derived new type: " << *PT << "\n";
@ -1130,11 +1130,13 @@ void ArrayType::typeBecameConcrete(const DerivedType *AbsTy) {
//
void VectorType::refineAbstractType(const DerivedType *OldType,
const Type *NewType) {
VectorTypes->RefineAbstractType(this, OldType, NewType);
LLVMContextImpl *pImpl = OldType->getContext().pImpl;
pImpl->VectorTypes.RefineAbstractType(this, OldType, NewType);
}
void VectorType::typeBecameConcrete(const DerivedType *AbsTy) {
VectorTypes->TypeBecameConcrete(this, AbsTy);
LLVMContextImpl *pImpl = AbsTy->getContext().pImpl;
pImpl->VectorTypes.TypeBecameConcrete(this, AbsTy);
}
// refineAbstractType - Called when a contained type is found to be more