[llvm] r276291 - Weaken ThreadSafeRefCountedBase atomics.

Benjamin Kramer via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 21 08:06:51 PDT 2016


Author: d0k
Date: Thu Jul 21 10:06:50 2016
New Revision: 276291

URL: http://llvm.org/viewvc/llvm-project?rev=276291&view=rev
Log:
Weaken ThreadSafeRefCountedBase atomics.

Doesn't make a difference on x86, but avoids memory barriers on
weakly-ordered archs like PowerPC and ARM.

Modified:
    llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h

Modified: llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h?rev=276291&r1=276290&r2=276291&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h (original)
+++ llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h Thu Jul 21 10:06:50 2016
@@ -104,10 +104,10 @@ protected:
   ThreadSafeRefCountedBase() : RefCount(0) {}
 
 public:
-  void Retain() const { ++RefCount; }
+  void Retain() const { RefCount.fetch_add(1, std::memory_order_relaxed); }
 
   void Release() const {
-    int NewRefCount = --RefCount;
+    int NewRefCount = RefCount.fetch_sub(1, std::memory_order_acq_rel) - 1;
     assert(NewRefCount >= 0 && "Reference count was already zero.");
     if (NewRefCount == 0)
       delete static_cast<const Derived*>(this);




More information about the llvm-commits mailing list