[PATCH] D122377: [PowerPC][Linux] Support 16-byte lock free atomics on pwr8 and up

Kai Luo via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 25 00:02:09 PDT 2022


lkail updated this revision to Diff 418142.
lkail added reviewers: dim, pkubaj.
lkail set the repository for this revision to rG LLVM Github Monorepo.
lkail added subscribers: pkubaj, dim.
lkail added a comment.

@dim  @pkubaj We are modifying layout of 16-byte atomic type on Linux to be consistent with GCC, I don't know if it also applies to freebsd as @MaskRay pointed out.
To be more specific, on Linux, for arch level supporting 16-byte lock free atomics, 16-byte atomic type is properly aligned.

  #include <stdatomic.h>
  
  int printf(const char *, ...);
  
  typedef struct A {
    char x[16];
  } A;
  
  typedef struct B {
    char q;
    _Atomic(A) a;
  } B;
  
  int main(void) {
    _Atomic(A) *p = 0;
    printf("aligned: %d\n", __builtin_offsetof(B, a) % 16 == 0);
  #if __clang__
    printf("lock free (size built-in): %d\n", __c11_atomic_is_lock_free(sizeof(*p)));
  #endif
    printf("lock free (type query using pointer): %d\n", atomic_is_lock_free(p));
  }

Current clang gives

  aligned: 0
  lock free (size built-in): 1
  lock free (type query using pointer): 1

GCC gives

  aligned: 1
  lock free (type query using pointer): 1

This patch also modifies the query of `__atomic_always_lock_free(16, 0)` to return true for supported arch level.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D122377/new/

https://reviews.llvm.org/D122377

Files:
  clang/lib/Basic/Targets/PPC.cpp
  clang/lib/Basic/Targets/PPC.h
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/CodeGen/PowerPC/atomic-alignment.c
  clang/test/CodeGen/PowerPC/quadword-atomics.c
  clang/test/Driver/ppc-quadword-atomics.c
  clang/test/Sema/atomic-ops.c

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D122377.418142.patch
Type: text/x-patch
Size: 12172 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220325/f2760956/attachment-0001.bin>


More information about the llvm-commits mailing list