diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2014-03-03 18:02:34 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2014-03-03 18:02:34 +0000 |
commit | 7515c71cb6a29141b70f3788651e98d1478c810f (patch) | |
tree | 9c981e623dfbeb106f0e574cb4d573b30bca4fc5 /include/llvm/ADT | |
parent | 4721e55a0c2e749cba4f91aa584508284ff67d2c (diff) | |
download | llvm-7515c71cb6a29141b70f3788651e98d1478c810f.tar.gz llvm-7515c71cb6a29141b70f3788651e98d1478c810f.tar.bz2 llvm-7515c71cb6a29141b70f3788651e98d1478c810f.tar.xz |
Revert "[C++11] Replace LLVM atomics with std::atomic."
Breaks the MSVC build.
DataStream.cpp(44): error C2552: 'llvm::Statistic::Value' : non-aggregates cannot be initialized with initializer list
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202731 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT')
-rw-r--r-- | include/llvm/ADT/Statistic.h | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/include/llvm/ADT/Statistic.h b/include/llvm/ADT/Statistic.h index 5e7a433e44..26aac7bea6 100644 --- a/include/llvm/ADT/Statistic.h +++ b/include/llvm/ADT/Statistic.h @@ -26,8 +26,8 @@ #ifndef LLVM_ADT_STATISTIC_H #define LLVM_ADT_STATISTIC_H +#include "llvm/Support/Atomic.h" #include "llvm/Support/Valgrind.h" -#include <atomic> namespace llvm { class raw_ostream; @@ -36,10 +36,10 @@ class Statistic { public: const char *Name; const char *Desc; - std::atomic<unsigned> Value; + volatile llvm::sys::cas_flag Value; bool Initialized; - unsigned getValue() const { return Value; } + llvm::sys::cas_flag getValue() const { return Value; } const char *getName() const { return Name; } const char *getDesc() const { return Desc; } @@ -63,54 +63,48 @@ public: // atomic operation to update the value safely in the presence of // concurrent accesses, but not to read the return value, so the // return value is not thread safe. - ++Value; + sys::AtomicIncrement(&Value); return init(); } unsigned operator++(int) { init(); - unsigned OldValue = Value++; + unsigned OldValue = Value; + sys::AtomicIncrement(&Value); return OldValue; } const Statistic &operator--() { - --Value; + sys::AtomicDecrement(&Value); return init(); } unsigned operator--(int) { init(); - unsigned OldValue = Value--; + unsigned OldValue = Value; + sys::AtomicDecrement(&Value); return OldValue; } const Statistic &operator+=(const unsigned &V) { if (!V) return *this; - Value += V; + sys::AtomicAdd(&Value, V); return init(); } const Statistic &operator-=(const unsigned &V) { if (!V) return *this; - Value -= V; + sys::AtomicAdd(&Value, -V); return init(); } const Statistic &operator*=(const unsigned &V) { - unsigned Original, Result; - do { - Original = Value; - Result = Original * V; - } while (!Value.compare_exchange_strong(Original, Result)); + sys::AtomicMul(&Value, V); return init(); } const Statistic &operator/=(const unsigned &V) { - unsigned Original, Result; - do { - Original = Value; - Result = Original / V; - } while (!Value.compare_exchange_strong(Original, Result)); + sys::AtomicDiv(&Value, V); return init(); } @@ -157,7 +151,7 @@ public: protected: Statistic &init() { bool tmp = Initialized; - std::atomic_thread_fence(std::memory_order_seq_cst); + sys::MemoryFence(); if (!tmp) RegisterStatistic(); TsanHappensAfter(this); return *this; @@ -168,7 +162,7 @@ protected: // STATISTIC - A macro to make definition of statistics really simple. This // automatically passes the DEBUG_TYPE of the file into the statistic. #define STATISTIC(VARNAME, DESC) \ - static llvm::Statistic VARNAME = { DEBUG_TYPE, DESC, {}, 0 } + static llvm::Statistic VARNAME = { DEBUG_TYPE, DESC, 0, 0 } /// \brief Enable the collection and printing of statistics. void EnableStatistics(); |