[LLVMdev] Atomic operations: minimal or maximal?
criswell at cs.uiuc.edu
Mon Mar 3 12:07:16 PST 2008
Andrew Lenharth wrote:
> Looking through the various architectures, it seems that the minimal
> approach to atomic intrinsics isn't necessarily the best.
> If we assume CAS and atomic add, then we can implement atomic N, where
> n is some other operation with a loop. however, for the ll/sc
> architectures, this will lower into a double loop (the outer loop of
> load-op-CAS and the CAS loop. On such archs, the atomic op can be
> done as one loop. To generate the best code, we would have to
> recognize loops that equated to atomic N, and raise them to a more
> efficient implementation. The alternative is to implement atomic N
> for all the Ns in gcc's atomic ops, and let all the ll/sc archs
> generate efficient code easily, and just lower to a loop for x86,
> sparc, and ia64.
Most of these atomic operations for the GCC builtins seem to be
variations of fetch_and_phi where phi is some integer or bitwise
operation (and, or, add, sub, inc, dec, etc). There are relatively few
of them, and they'd all be nearly identical to the fetch_and_add
implement ion on LL/SC architectures, so development effort is minimal.
I'd say implement them all (or exclude only those that get very, very
little usage). There aren't that many atomic different kinds of atomic
builtins, and the analysis to raise atomic op loops looks like a lot of
-- John T.
> Which is a long way to ask, what do people think design wise? Should
> we have a large set of atomic ops that most platforms support natively
> and the couple that don't can easily lower, or have a minimal set and
> try to raise the lowered gcc atomic ops to efficient code on archs
> that support ll/sc (essentially trying to recognize the ld, op, CAS
> loops during codegen).
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev