[llvm-bugs] [Bug 29102] Incorrect barriers for legacy __sync_* on ARM64

via llvm-bugs llvm-bugs at lists.llvm.org
Thu Nov 1 15:43:19 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=29102

Tim Northover <t.p.northover at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
            Summary|Incorrect barriers for      |Incorrect barriers for
                   |atomic intrinsics on ARM64  |legacy __sync_* on ARM64
          Component|new bugs                    |LLVM Codegen
         Resolution|INVALID                     |---
            Product|new-bugs                    |clang
           Assignee|unassignedbugs at nondot.org   |unassignedclangbugs at nondot.
                   |                            |org
                 CC|                            |richard-llvm at metafoo.co.uk

--- Comment #3 from Tim Northover <t.p.northover at gmail.com> ---
I've just been reading through the Mono history & comments, and it's convinced
me to reopen this.

The issue is specifically with the legacy __sync_* operations. Those *do*
appear to give extra barriers on AArch64 GCC, and the documentation (while
written in horribly vague pre-C++11 terms) could be read to require them -- see
https://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html.

GCC codegen for a generic loop is roughly:

    .L2:
        ldxr    w1, [x0]
        add     w1, w1, 4
        stlxr   w2, w1, [x0]
        cbnz    w2, .L2
        dmb     ish

This is also what Will implemented (and justified) in the referenced GCC thread
on the Linux Kernel.

No matter what, this will involve Clang changes. There's a reasonable chance it
could be implemented entirely in Clang (as an "atomicrmw release" followed by a
fence) but I haven't thought in enough detail to convince even myself.
Otherwise it would need the new super_seq_cst above, and also Clang changes to
use it -- so I've put this in the Clang component.

Priority may also be an issue. This requires strong expertise and interest in
the topic. That may be difficult to drum up for legacy intrinsics.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20181101/699cafa1/attachment.html>


More information about the llvm-bugs mailing list