Index: llvm/trunk/include/llvm/Support/Atomic.h =================================================================== --- llvm/trunk/include/llvm/Support/Atomic.h +++ llvm/trunk/include/llvm/Support/Atomic.h @@ -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 @@ 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); } } Index: llvm/trunk/lib/Support/Atomic.cpp =================================================================== --- llvm/trunk/lib/Support/Atomic.cpp +++ llvm/trunk/lib/Support/Atomic.cpp @@ -56,62 +56,3 @@ # 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; -}