HomePhabricator

[CMake] CheckAtomic.cmake: catch false positives in RISC-V

Authored by gokturk on Feb 17 2020, 10:36 AM.

Description

[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;

  1. 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

Details

Committed
luismarquesFeb 17 2020, 10:53 AM
Reviewer
jfb
Differential Revision
D68964: cmake/modules/CheckAtomic.cmake: catch false positives in RISC-V
Parents
rG0e2eb357e047: GlobalISel: Extend narrowing to G_ASHR
Branches
Unknown
Tags
Unknown