https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80857
Bug ID: 80857
Summary: slow compare_exchange_weak with unintegral type
Product: gcc
Version: 7.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sv_91 at inbox dot ru
Target Milestone: ---
Created attachment 41403
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41403&action=edit
example
Compared to gcc 6.2.0, function func2 work slower:
gcc 6.2.0
Result 49999995000000. Time 110
Result 49999995000000. Time 110
gcc 7.1.0
Result 49999995000000. Time 98
Result 49999995000000. Time 154
Build options:
-m64 -Wextra -Wall -Werror -Wpedantic -Wformat-security -fno-builtin-malloc
-fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -pthread -std=c++17
-DNDEBUG -Ofast -funroll-loops -fomit-frame-pointer -Wno-misleading-indentation
-g -mfpmath=sse
Function func2 call function
template<typename T>
inline void atomic_fetch_add(std::atomic<T> &obj, const T& arg) noexcept {
T current = obj;
while (!obj.compare_exchange_weak(current, current + arg));
}
where T == std::chrono::milliseconds