[llvm-commits] [llvm] r137403 - /llvm/trunk/docs/Atomics.html
Eli Friedman
eli.friedman at gmail.com
Thu Aug 11 18:55:13 PDT 2011
On Thu, Aug 11, 2011 at 5:36 PM, Andrew Trick <atrick at apple.com> wrote:
> Author: atrick
> Date: Thu Aug 11 19:36:38 2011
> New Revision: 137403
>
> URL: http://llvm.org/viewvc/llvm-project?rev=137403&view=rev
> Log:
> Clarify the definition of SequentiallyConsistent operations.
>
> Modified:
> llvm/trunk/docs/Atomics.html
>
> Modified: llvm/trunk/docs/Atomics.html
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/Atomics.html?rev=137403&r1=137402&r2=137403&view=diff
> ==============================================================================
> --- llvm/trunk/docs/Atomics.html (original)
> +++ llvm/trunk/docs/Atomics.html Thu Aug 11 19:36:38 2011
> @@ -330,9 +330,10 @@
>
> <div>
>
> -<p>SequentiallyConsistent (<code>seq_cst</code> in IR) provides Acquire and/or
> - Release semantics, and in addition guarantees a total ordering exists with
> - all other SequentiallyConsistent operations.
> +<p>SequentiallyConsistent (<code>seq_cst</code> in IR) provides
> + Acquire semantics for loads and Release semantics for
> + stores. Additionally, it guarantees that a total ordering exists
> + between all SequentiallyConsistent operations.
>
> <dl>
> <dt>Relevant standard</dt>
> @@ -344,11 +345,17 @@
> reason about for the programmer than other kinds of operations, and using
> them is generally a practical performance tradeoff.</dd>
> <dt>Notes for optimizers</dt>
> - <dd>In general, optimizers should treat this like a nothrow call; the
> - the possible optimizations are usually not interesting.</dd>
> + <dd>In general, optimizers should treat this like a nothrow call.
> + However, optimizers may improve performance by reordering a
> + store followed by a load unless both operations are sequentially
> + consistent.</dd>
It's legal, but how is it likely to improve performance? I can't
think of any transformation that would try to do this... maybe GVN?
> <dt>Notes for code generation</dt>
> - <dd>SequentiallyConsistent operations generally require the strongest
> - barriers supported by the architecture.</dd>
> + <dd>SequentiallyConsistent loads minimally require the same barriers
> + as Acquire operations and SequeuentiallyConsistent stores require
> + Release barriers. Additionally, the code generator must enforce
> + ordering between SequeuentiallyConsistent stores followed by
> + SequeuentiallyConsistent loads. On common architectures, this
> + requires emitting a full fence after SequeuentiallyConsistent stores.</dd>
> </dl>
See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2745.html
? It's actually kind of nasty: you can implement seq_cst load/store
by add a fence for either the load or the store, and people don't
appear to be making the choice consistently.
-Eli
More information about the llvm-commits
mailing list