diff options
author | JF Bastien <jfb@chromium.org> | 2013-11-08 15:52:28 -0800 |
---|---|---|
committer | JF Bastien <jfb@chromium.org> | 2013-11-08 15:52:28 -0800 |
commit | a963b803407c9d1cac644cc425004e0ccd28fa45 (patch) | |
tree | ed37041d85555f254bb835ce3f027e3eb049b279 /lib/AST/ExternalASTSource.cpp | |
parent | 5b8e932d70fcf281e193aebfd0d3ac55d057f2da (diff) |
Cherrypick upstream r183033: Add support for optimized (non-generic) atomic libcalls.
For integer types of sizes 1, 2, 4 and 8, libcompiler-rt (and libgcc)
provide atomic functions that pass parameters by value and return
results directly.
libgcc and libcompiler-rt only provide optimized libcalls for
__atomic_fetch_*, as generic libcalls on non-integer types would make
little sense. This means that we can finally make __atomic_fetch_* work
on architectures for which we don't provide these operations as builtins
(e.g. ARM).
This should fix the dreaded "cannot compile this atomic library call
yet" error that would pop up once every while.
These code generation issues are encountered because PNaCl doesn't
inline some of the atomic instructions, whereas other targets do. This
patch is just after the 3.3 branch and applies cleanly, but it doesn't
fix all issues: there is still at least one with atomic operations on
pointers which isn't as clean to fix as applying one patch, so I'll
leave that one as-is for now.
R=dschuff@chromium.org
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3623
TEST= ./pnacl/scripts/llvm-test.py --libcxx-tests
Review URL: https://codereview.chromium.org/59793007
Diffstat (limited to 'lib/AST/ExternalASTSource.cpp')
0 files changed, 0 insertions, 0 deletions