[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