summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2009-08-04 23:47:44 +0000
committerOwen Anderson <resistor@mac.com>2009-08-04 23:47:44 +0000
commitd918649d5fab3df91b0a59118fa886c36e130f15 (patch)
tree810d20d02346baefcacf6d92725e4b0779357388
parent542cffc3eb6a9b899a8605a43b45867ac2c51ba6 (diff)
downloadbcm5719-llvm-d918649d5fab3df91b0a59118fa886c36e130f15.tar.gz
bcm5719-llvm-d918649d5fab3df91b0a59118fa886c36e130f15.zip
Privatize the VectorType uniquing.
llvm-svn: 78125
-rw-r--r--llvm/lib/VMCore/LLVMContextImpl.h1
-rw-r--r--llvm/lib/VMCore/Type.cpp14
2 files changed, 9 insertions, 6 deletions
diff --git a/llvm/lib/VMCore/LLVMContextImpl.h b/llvm/lib/VMCore/LLVMContextImpl.h
index 5e027cb907f..a92b571f699 100644
--- a/llvm/lib/VMCore/LLVMContextImpl.h
+++ b/llvm/lib/VMCore/LLVMContextImpl.h
@@ -129,6 +129,7 @@ struct LLVMContextImpl {
ConstantInt *TheFalseVal;
TypeMap<ArrayValType, ArrayType> ArrayTypes;
+ TypeMap<VectorValType, VectorType> VectorTypes;
LLVMContextImpl() : TheTrueVal(0), TheFalseVal(0) { }
};
diff --git a/llvm/lib/VMCore/Type.cpp b/llvm/lib/VMCore/Type.cpp
index 3c1a67f3a1c..610036ef0d5 100644
--- a/llvm/lib/VMCore/Type.cpp
+++ b/llvm/lib/VMCore/Type.cpp
@@ -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
OpenPOWER on IntegriCloud