[PATCH] D123642: [clang codegen] Assume arguments of __atomic_* are aligned.

Eli Friedman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 15 09:28:22 PDT 2022


efriedma added a comment.

> Have we verified that this is the rule that GCC uses? Is it true even if e.g. the pointer expression is the address of a variable with a known alignment, or if the pointer has an explicitly-aligned type (e.g. with an aligned typedef)?

As far as I can tell, if the type's size is a power of two, and there's an inline atomic sequence available, gcc will use an inline sequence that assumes the address is naturally aligned.  Otherwise, it makes the libcall.  I've tried a variety of ways of writing the operation; alignment doesn't matter at all, no matter what the alignment actually is.

Oddly, `__atomic_is_lock_free`/`__atomic_always_lock_free` do care about the alignment, though.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D123642



More information about the cfe-commits mailing list