diff options
| author | Owen Anderson <resistor@mac.com> | 2009-08-17 17:34:27 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2009-08-17 17:34:27 +0000 |
| commit | 286b3af6aea36d924ac0f4b7ed1ff55031d0377a (patch) | |
| tree | 4a433d44013e8f595711861e011c8293514c55e6 | |
| parent | d91e6b097d7ea345b747042455547a2d8be5e52b (diff) | |
| download | bcm5719-llvm-286b3af6aea36d924ac0f4b7ed1ff55031d0377a.tar.gz bcm5719-llvm-286b3af6aea36d924ac0f4b7ed1ff55031d0377a.zip | |
Move the TypeMap lock to a member on LLVMContextImpl.
llvm-svn: 79256
| -rw-r--r-- | llvm/lib/VMCore/LLVMContextImpl.h | 4 | ||||
| -rw-r--r-- | llvm/lib/VMCore/Type.cpp | 17 |
2 files changed, 11 insertions, 10 deletions
diff --git a/llvm/lib/VMCore/LLVMContextImpl.h b/llvm/lib/VMCore/LLVMContextImpl.h index 9c48fbe7301..265201434d8 100644 --- a/llvm/lib/VMCore/LLVMContextImpl.h +++ b/llvm/lib/VMCore/LLVMContextImpl.h @@ -20,6 +20,7 @@ #include "llvm/LLVMContext.h" #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" +#include "llvm/System/Mutex.h" #include "llvm/System/RWMutex.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APInt.h" @@ -132,6 +133,9 @@ public: ConstantInt *TheTrueVal; ConstantInt *TheFalseVal; + // Lock used for guarding access to the type maps. + sys::SmartMutex<true> TypeMapLock; + TypeMap<ArrayValType, ArrayType> ArrayTypes; TypeMap<VectorValType, VectorType> VectorTypes; TypeMap<PointerValType, PointerType> PointerTypes; diff --git a/llvm/lib/VMCore/Type.cpp b/llvm/lib/VMCore/Type.cpp index 93433a7d364..3b54f73b251 100644 --- a/llvm/lib/VMCore/Type.cpp +++ b/llvm/lib/VMCore/Type.cpp @@ -47,9 +47,6 @@ AbstractTypeUser::~AbstractTypeUser() {} // Type Class Implementation //===----------------------------------------------------------------------===// -// Lock used for guarding access to the type maps. -static ManagedStatic<sys::SmartMutex<true> > TypeMapLock; - // Recursive lock used for guarding access to AbstractTypeUsers. // NOTE: The true template parameter means this will no-op when we're not in // multithreaded mode. @@ -759,7 +756,7 @@ const IntegerType *IntegerType::get(LLVMContext &C, unsigned NumBits) { // First, see if the type is already in the table, for which // a reader lock suffices. - sys::SmartScopedLock<true> L(*TypeMapLock); + sys::SmartScopedLock<true> L(pImpl->TypeMapLock); ITy = pImpl->IntegerTypes.get(IVT); if (!ITy) { @@ -801,7 +798,7 @@ FunctionType *FunctionType::get(const Type *ReturnType, LLVMContextImpl *pImpl = ReturnType->getContext().pImpl; - sys::SmartScopedLock<true> L(*TypeMapLock); + sys::SmartScopedLock<true> L(pImpl->TypeMapLock); FT = pImpl->FunctionTypes.get(VT); if (!FT) { @@ -826,7 +823,7 @@ ArrayType *ArrayType::get(const Type *ElementType, uint64_t NumElements) { LLVMContextImpl *pImpl = ElementType->getContext().pImpl; - sys::SmartScopedLock<true> L(*TypeMapLock); + sys::SmartScopedLock<true> L(pImpl->TypeMapLock); AT = pImpl->ArrayTypes.get(AVT); if (!AT) { @@ -860,7 +857,7 @@ VectorType *VectorType::get(const Type *ElementType, unsigned NumElements) { LLVMContextImpl *pImpl = ElementType->getContext().pImpl; - sys::SmartScopedLock<true> L(*TypeMapLock); + sys::SmartScopedLock<true> L(pImpl->TypeMapLock); PT = pImpl->VectorTypes.get(PVT); if (!PT) { @@ -892,7 +889,7 @@ StructType *StructType::get(LLVMContext &Context, LLVMContextImpl *pImpl = Context.pImpl; - sys::SmartScopedLock<true> L(*TypeMapLock); + sys::SmartScopedLock<true> L(pImpl->TypeMapLock); ST = pImpl->StructTypes.get(STV); if (!ST) { @@ -948,7 +945,7 @@ PointerType *PointerType::get(const Type *ValueType, unsigned AddressSpace) { LLVMContextImpl *pImpl = ValueType->getContext().pImpl; - sys::SmartScopedLock<true> L(*TypeMapLock); + sys::SmartScopedLock<true> L(pImpl->TypeMapLock); PT = pImpl->PointerTypes.get(PVT); if (!PT) { @@ -1108,7 +1105,7 @@ void DerivedType::unlockedRefineAbstractTypeTo(const Type *NewType) { void DerivedType::refineAbstractTypeTo(const Type *NewType) { // All recursive calls will go through unlockedRefineAbstractTypeTo, // to avoid deadlock problems. - sys::SmartScopedLock<true> L(*TypeMapLock); + sys::SmartScopedLock<true> L(NewType->getContext().pImpl->TypeMapLock); unlockedRefineAbstractTypeTo(NewType); } |

