diff options
author | Alex Richardson <Alexander.Richardson@cl.cam.ac.uk> | 2020-09-21 09:00:54 +0100 |
---|---|---|
committer | Alex Richardson <Alexander.Richardson@cl.cam.ac.uk> | 2020-09-21 10:21:11 +0100 |
commit | aa85c6f2a528792e2ff778a36fb6f35a01e8191c (patch) | |
tree | 6b454df0269ed5805932fc33b52c96650989c0e4 /llvm/lib/CodeGen/MachineScheduler.cpp | |
parent | 8cf6778d3040b33db768bb7542630d9820a72e28 (diff) | |
download | llvm-aa85c6f2a528792e2ff778a36fb6f35a01e8191c.zip llvm-aa85c6f2a528792e2ff778a36fb6f35a01e8191c.tar.gz llvm-aa85c6f2a528792e2ff778a36fb6f35a01e8191c.tar.bz2 |
[compiler-rt] Fix atomic support functions on 32-bit architectures
The code currently uses __c11_atomic_is_lock_free() to detect whether an
atomic operation is natively supported. However, this can result in a
runtime function call to determine whether the given operation is lock-free
and clang generating a call to e.g. __atomic_load_8 since the branch is
not a constant zero. Since we are implementing those runtime functions, we
must avoid those calls. This patch replaces __c11_atomic_is_lock_free()
with __atomic_always_lock_free() which always results in a compile-time
constant value. This problem was found while compiling atomic.c for MIPS32
since the -Watomic-alignment warning was being triggered and objdump showed
an undefined reference to _atomic_is_lock_free.
In addition to fixing 32-bit platforms this also enables the 16-byte case
that was disabled in r153779 (185f2edd70a34d28b305df0cd8ce519ecbca2cfd).
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D86510
Diffstat (limited to 'llvm/lib/CodeGen/MachineScheduler.cpp')
0 files changed, 0 insertions, 0 deletions