[llvm] r271540 - Remove all of the legacy home-grown atomic operations LLVM provided

Chandler Carruth via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 2 10:11:11 PDT 2016


Author: chandlerc
Date: Thu Jun  2 12:11:11 2016
New Revision: 271540

URL: http://llvm.org/viewvc/llvm-project?rev=271540&view=rev
Log:
Remove all of the legacy home-grown atomic operations LLVM provided
except for CompareAndSwap. That is the only one still being used
anywhere now that statistics have been moved onto std::atomic.

Also, add a warning to the header that we shouldn't introduce more uses
of these old style atomics and instead should be using C++11's
std::atomic facilities.

Really hoping that we can hammer out the last couple of users here and
replace them with something more localized and/or principled, but
figured this was a pretty good start. =]

Note that this patch will need to be reverted if r271504 needs to be
reverted as that removes the last user of these. However, the biggest
risk for that patch was MSVC 2013 and at least one bot has already
passed where it would have failed there. I've tested MSVC 2015 using
their web interfaces and other platforms seem fine, so I'm optimistic.

Differential Revision: http://reviews.llvm.org/D20901

Modified:
    llvm/trunk/include/llvm/Support/Atomic.h
    llvm/trunk/lib/Support/Atomic.cpp

Modified: llvm/trunk/include/llvm/Support/Atomic.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Atomic.h?rev=271540&r1=271539&r2=271540&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/Atomic.h (original)
+++ llvm/trunk/include/llvm/Support/Atomic.h Thu Jun  2 12:11:11 2016
@@ -9,6 +9,10 @@
 //
 // This file declares the llvm::sys atomic operations.
 //
+// DO NOT USE IN NEW CODE!
+//
+// New code should always rely on the std::atomic facilities in C++11.
+//
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_SUPPORT_ATOMIC_H
@@ -28,11 +32,6 @@ namespace llvm {
     cas_flag CompareAndSwap(volatile cas_flag* ptr,
                             cas_flag new_value,
                             cas_flag old_value);
-    cas_flag AtomicIncrement(volatile cas_flag* ptr);
-    cas_flag AtomicDecrement(volatile cas_flag* ptr);
-    cas_flag AtomicAdd(volatile cas_flag* ptr, cas_flag val);
-    cas_flag AtomicMul(volatile cas_flag* ptr, cas_flag val);
-    cas_flag AtomicDiv(volatile cas_flag* ptr, cas_flag val);
   }
 }
 

Modified: llvm/trunk/lib/Support/Atomic.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Atomic.cpp?rev=271540&r1=271539&r2=271540&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Atomic.cpp (original)
+++ llvm/trunk/lib/Support/Atomic.cpp Thu Jun  2 12:11:11 2016
@@ -56,62 +56,3 @@ sys::cas_flag sys::CompareAndSwap(volati
 #  error No compare-and-swap implementation for your platform!
 #endif
 }
-
-sys::cas_flag sys::AtomicIncrement(volatile sys::cas_flag* ptr) {
-#if LLVM_HAS_ATOMICS == 0
-  ++(*ptr);
-  return *ptr;
-#elif defined(GNU_ATOMICS)
-  return __sync_add_and_fetch(ptr, 1);
-#elif defined(_MSC_VER)
-  return InterlockedIncrement(ptr);
-#else
-#  error No atomic increment implementation for your platform!
-#endif
-}
-
-sys::cas_flag sys::AtomicDecrement(volatile sys::cas_flag* ptr) {
-#if LLVM_HAS_ATOMICS == 0
-  --(*ptr);
-  return *ptr;
-#elif defined(GNU_ATOMICS)
-  return __sync_sub_and_fetch(ptr, 1);
-#elif defined(_MSC_VER)
-  return InterlockedDecrement(ptr);
-#else
-#  error No atomic decrement implementation for your platform!
-#endif
-}
-
-sys::cas_flag sys::AtomicAdd(volatile sys::cas_flag* ptr, sys::cas_flag val) {
-#if LLVM_HAS_ATOMICS == 0
-  *ptr += val;
-  return *ptr;
-#elif defined(GNU_ATOMICS)
-  return __sync_add_and_fetch(ptr, val);
-#elif defined(_MSC_VER)
-  return InterlockedExchangeAdd(ptr, val) + val;
-#else
-#  error No atomic add implementation for your platform!
-#endif
-}
-
-sys::cas_flag sys::AtomicMul(volatile sys::cas_flag* ptr, sys::cas_flag val) {
-  sys::cas_flag original, result;
-  do {
-    original = *ptr;
-    result = original * val;
-  } while (sys::CompareAndSwap(ptr, result, original) != original);
-
-  return result;
-}
-
-sys::cas_flag sys::AtomicDiv(volatile sys::cas_flag* ptr, sys::cas_flag val) {
-  sys::cas_flag original, result;
-  do {
-    original = *ptr;
-    result = original / val;
-  } while (sys::CompareAndSwap(ptr, result, original) != original);
-
-  return result;
-}




More information about the llvm-commits mailing list