Fences are expensive. Avoid doing them when we're not in multithreaded mode.
authorOwen Anderson <resistor@mac.com>
Fri, 19 Jun 2009 17:50:11 +0000 (17:50 +0000)
committerOwen Anderson <resistor@mac.com>
Fri, 19 Jun 2009 17:50:11 +0000 (17:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73777 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/ManagedStatic.h

index ee335d819a901a983158ae7a79eb4e4c6339dc47..4fc648319ad4757ba44d6cf6153defaccdd9cefe 100644 (file)
@@ -61,28 +61,28 @@ public:
   // Accessors.
   C &operator*() {
     void* tmp = Ptr;
-    sys::MemoryFence();
+    if (llvm_is_multithreaded()) sys::MemoryFence();
     if (!tmp) RegisterManagedStatic(object_creator<C>, object_deleter<C>);
 
     return *static_cast<C*>(Ptr);
   }
   C *operator->() {
     void* tmp = Ptr;
-    sys::MemoryFence();
+    if (llvm_is_multithreaded()) sys::MemoryFence();
     if (!tmp) RegisterManagedStatic(object_creator<C>, object_deleter<C>);
 
     return static_cast<C*>(Ptr);
   }
   const C &operator*() const {
     void* tmp = Ptr;
-    sys::MemoryFence();
+    if (llvm_is_multithreaded()) sys::MemoryFence();
     if (!tmp) RegisterManagedStatic(object_creator<C>, object_deleter<C>);
 
     return *static_cast<C*>(Ptr);
   }
   const C *operator->() const {
     void* tmp = Ptr;
-    sys::MemoryFence();
+    if (llvm_is_multithreaded()) sys::MemoryFence();
     if (!tmp) RegisterManagedStatic(object_creator<C>, object_deleter<C>);
 
     return static_cast<C*>(Ptr);