[all-commits] [llvm/llvm-project] 408a26: [CUDA] Ignore __CLANG_ATOMIC_LLONG_LOCK_FREE on i386
Ryan Prichard via All-commits
all-commits at lists.llvm.org
Thu Jul 21 17:24:48 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 408a2638fda63b381f8750e16c78bc3c845cfdfd
https://github.com/llvm/llvm-project/commit/408a2638fda63b381f8750e16c78bc3c845cfdfd
Author: Ryan Prichard <rprichard at google.com>
Date: 2022-07-21 (Thu, 21 Jul 2022)
Changed paths:
M clang/test/Preprocessor/cuda-types.cu
Log Message:
-----------
[CUDA] Ignore __CLANG_ATOMIC_LLONG_LOCK_FREE on i386
The default host CPU for an i386 triple is typically at least an i586,
which has cmpxchg8b (Clang feature, "cx8"). Therefore,
`__CLANG_ATOMIC_LLONG_LOCK_FREE` is 2 on the host, but the value should
be 1 for the device.
Also, grep for `__CLANG_ATOMIC_*` instead of `__GCC_ATOMIC_*`. The CLANG
macros are always emitted, but the GCC macros are omitted for the
*-windows-msvc targets. The `__GCC_HAVE_SYNC_COMPARE_AND_SWAP` macro
always has GCC in its name, not CLANG, however.
Reviewed By: tra
Differential Revision: https://reviews.llvm.org/D127465
Commit: 02a25279aedcd959d060bba585adc0fe1cec3782
https://github.com/llvm/llvm-project/commit/02a25279aedcd959d060bba585adc0fe1cec3782
Author: Ryan Prichard <rprichard at google.com>
Date: 2022-07-21 (Thu, 21 Jul 2022)
Changed paths:
M clang/lib/Frontend/InitPreprocessor.cpp
M clang/test/Preprocessor/init-x86.c
M clang/test/Sema/atomic-ops.c
Log Message:
-----------
[Frontend] Correct values of ATOMIC_*_LOCK_FREE to match builtin
Correct the logic used to set `ATOMIC_*_LOCK_FREE` preprocessor macros not
to rely on the ABI alignment of types. Instead, just assume all those
types are aligned correctly by default since clang uses safe alignment
for `_Atomic` types even if the underlying types are aligned to a lower
boundary by default.
For example, the `long long` and `double` types on x86 are aligned to
32-bit boundary by default. However, `_Atomic long long` and `_Atomic
double` are aligned to 64-bit boundary, therefore satisfying
the requirements of lock-free atomic operations.
This fixes PR #19355 by correcting the value of
`__GCC_ATOMIC_LLONG_LOCK_FREE` on x86, and therefore also fixing
the assumption made in libc++ tests. This also fixes PR #30581 by
applying a consistent logic between the functions used to implement
both interfaces.
Reviewed By: hfinkel, efriedma
Differential Revision: https://reviews.llvm.org/D28213
Compare: https://github.com/llvm/llvm-project/compare/b8e1544b9df0...02a25279aedc
More information about the All-commits
mailing list