Move the memory fences out of the path for single-threaded mode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73775 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson
2009-06-19 17:45:12 +00:00
parent 958e292c7a
commit 8e1c17aa5a
2 changed files with 15 additions and 14 deletions

View File

@ -198,9 +198,9 @@ static PassRegistrar *getPassRegistrar() {
// Use double-checked locking to safely initialize the registrar when // Use double-checked locking to safely initialize the registrar when
// we're running in multithreaded mode. // we're running in multithreaded mode.
PassRegistrar* tmp = PassRegistrarObj; PassRegistrar* tmp = PassRegistrarObj;
if (llvm_is_multithreaded()) {
sys::MemoryFence(); sys::MemoryFence();
if (!tmp) { if (!tmp) {
if (llvm_is_multithreaded()) {
llvm_acquire_global_lock(); llvm_acquire_global_lock();
tmp = PassRegistrarObj; tmp = PassRegistrarObj;
if (!tmp) { if (!tmp) {
@ -209,10 +209,11 @@ static PassRegistrar *getPassRegistrar() {
PassRegistrarObj = tmp; PassRegistrarObj = tmp;
} }
llvm_release_global_lock(); llvm_release_global_lock();
} else { }
} else if (!tmp) {
PassRegistrarObj = new PassRegistrar(); PassRegistrarObj = new PassRegistrar();
} }
}
return PassRegistrarObj; return PassRegistrarObj;
} }

View File

@ -458,9 +458,9 @@ void DerivedType::dropAllTypeUses() {
static Type *AlwaysOpaqueTy = 0; static Type *AlwaysOpaqueTy = 0;
static PATypeHolder* Holder = 0; static PATypeHolder* Holder = 0;
Type *tmp = AlwaysOpaqueTy; Type *tmp = AlwaysOpaqueTy;
if (llvm_is_multithreaded()) {
sys::MemoryFence(); sys::MemoryFence();
if (!tmp) { if (!tmp) {
if (llvm_is_multithreaded()) {
llvm_acquire_global_lock(); llvm_acquire_global_lock();
tmp = AlwaysOpaqueTy; tmp = AlwaysOpaqueTy;
if (!tmp) { if (!tmp) {
@ -472,11 +472,11 @@ void DerivedType::dropAllTypeUses() {
} }
llvm_release_global_lock(); llvm_release_global_lock();
}
} else { } else {
AlwaysOpaqueTy = OpaqueType::get(); AlwaysOpaqueTy = OpaqueType::get();
Holder = new PATypeHolder(AlwaysOpaqueTy); Holder = new PATypeHolder(AlwaysOpaqueTy);
} }
}
ContainedTys[0] = AlwaysOpaqueTy; ContainedTys[0] = AlwaysOpaqueTy;