Move the memory fences out of the path for single-threaded mode.
authorOwen Anderson <resistor@mac.com>
Fri, 19 Jun 2009 17:45:12 +0000 (17:45 +0000)
committerOwen Anderson <resistor@mac.com>
Fri, 19 Jun 2009 17:45:12 +0000 (17:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73775 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Pass.cpp
lib/VMCore/Type.cpp

index 3fce83d5a605ec72b1b71ad3616c35af6930147d..e943e31b1ed51a2fca5c9f9a62e2daadb0259bd9 100644 (file)
@@ -198,9 +198,9 @@ static PassRegistrar *getPassRegistrar() {
   // Use double-checked locking to safely initialize the registrar when
   // we're running in multithreaded mode.
   PassRegistrar* tmp = PassRegistrarObj;
-  sys::MemoryFence();
-  if (!tmp) {
-    if (llvm_is_multithreaded()) {
+  if (llvm_is_multithreaded()) {
+    sys::MemoryFence();
+    if (!tmp) {
       llvm_acquire_global_lock();
       tmp = PassRegistrarObj;
       if (!tmp) {
@@ -209,10 +209,11 @@ static PassRegistrar *getPassRegistrar() {
         PassRegistrarObj = tmp;
       }
       llvm_release_global_lock();
-    } else {
-      PassRegistrarObj = new PassRegistrar();
     }
+  } else if (!tmp) {
+    PassRegistrarObj = new PassRegistrar();
   }
+  
   return PassRegistrarObj;
 }
 
index 66eb10af23c1213b1c698ab7595ecbbc62a5f07a..5df7f12050511c93c840df404778aaac8bcfc7fa 100644 (file)
@@ -458,9 +458,9 @@ void DerivedType::dropAllTypeUses() {
     static Type *AlwaysOpaqueTy = 0;
     static PATypeHolder* Holder = 0;
     Type *tmp = AlwaysOpaqueTy;
-    sys::MemoryFence();
-    if (!tmp) {
-      if (llvm_is_multithreaded()) {
+    if (llvm_is_multithreaded()) {
+      sys::MemoryFence();
+      if (!tmp) {
         llvm_acquire_global_lock();
         tmp = AlwaysOpaqueTy;
         if (!tmp) {
@@ -472,12 +472,12 @@ void DerivedType::dropAllTypeUses() {
         }
       
         llvm_release_global_lock();
-      } else {
-        AlwaysOpaqueTy = OpaqueType::get();
-        Holder = new PATypeHolder(AlwaysOpaqueTy);
-      } 
-    }
-    
+      }
+    } else {
+      AlwaysOpaqueTy = OpaqueType::get();
+      Holder = new PATypeHolder(AlwaysOpaqueTy);
+    } 
+        
     ContainedTys[0] = AlwaysOpaqueTy;
 
     // Change the rest of the types to be Int32Ty's.  It doesn't matter what we