diff options
| author | Gokturk Yuksek <gokturk@binghamton.edu> | 2020-02-17 18:36:18 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@chromium.org> | 2020-02-20 15:22:06 +0100 |
| commit | a572a8a147c76b9d31585c2d4257a5db566c9a9d (patch) | |
| tree | 1dc46dd78664fc1f2c51e9e78e3ce190f5fccdd3 /libcxx/cmake/Modules | |
| parent | 4bcdac8d762794d822819eb6d207a0630c345d0b (diff) | |
| download | bcm5719-llvm-a572a8a147c76b9d31585c2d4257a5db566c9a9d.tar.gz bcm5719-llvm-a572a8a147c76b9d31585c2d4257a5db566c9a9d.zip | |
[CMake] CheckAtomic.cmake: catch false positives in RISC-V
The check for 'HAVE_CXX_ATOMICS_WITHOUT_LIB' may create false
positives in RISC-V. This is reproducible when compiling LLVM natively
using GCC on a rv64gc (rv64imafdgc) host. Due to the 'A' (atomic)
extension, g++ replaces calls to libatomic operations on the
std::atomic<int> type with the native hardware instructions. As a
result, the compilation succeeds and the build system thinks it
doesn't need to pass '-latomic'.
Improve the reliability of the 'HAVE_CXX_ATOMICS_WITHOUT_LIB' test in
two steps:
1. Force a pre-increment on x (++x), which should force a call to a
libatomic function;
2. Because step 1 would resolve the increment to 'amoadd.w.aq' under
the 'A' extension, force the same operation on sub-word types, for
which there is no hardware support.
Reviewers: jfb, hintonda, smeenai, mgorny, JDevlieghere, jyknight
Reviewed By: jfb
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68964
(cherry picked from commit cef85193b2cc1817ca43199a0ae9c6f25723997d)
Diffstat (limited to 'libcxx/cmake/Modules')
0 files changed, 0 insertions, 0 deletions

