[PATCH] Add HLE target feature

Michael Liao michael.liao at intel.com
Wed Feb 20 17:21:34 PST 2013


Hi All

I want to clarify that the additional flags added in atomic memory order
work doesn't change the existing memory model definition but just passes
the hint to backend. It's target-specific hint based on the assumption
it won't break the well-defined model.

Yours
- Michael

On Wed, 2013-02-20 at 17:08 -0800, Chandler Carruth wrote:
> On Wed, Feb 20, 2013 at 4:51 PM, Jeffrey Yasskin
> <jyasskin at googlers.com> wrote:
>         Don't take me as authoritative, but it seems sensible to add
>         clang and
>         LLVM support for these instructions if there's enough of a
>         spec for
>         the language-level operations to describe when the compiler
>         can
>         optimize around them. For example, the C11 atomics allow the
>         compiler
>         to reorder non-atomic operations across atomic operations in
>         certain
>         circumstances.
>         
> 
> 
> I agree. For the primitive atomic operations which libraries for
> synchronization decompose into, we should have a clear semantic model
> that ensures optimizations on non-atomic code is not pessimized. That
> was a large part of the motivation behind giving LLVM a memory model
> and atomic operation support. I think it would be a shame for a
> language attempting to leverage HLE to lose the ability to represent
> synchronization in terms of the LLVM memory model, and consequentially
> for LLVM to lose the ability to optimize around the synchronization
> when safe[1].
> 
> 
> That said, the next bit is critical:
>  
>         Is there a description of the language-level semantics of the
>         operations you're adding, or does it all rely on the
>         instruction set
>         definition? Could a compiler decide that it's a good idea to
>         add these
>         prefixes on its own?
>         
> 
> 
> This is really important to get right. We need to provide a clear and
> carefully worded spec for this in the IR's memory model so that the
> set of allowed optimizations and transforms are well understood.
> 
> 
> Once we have that, my hope is that the implementation of this would be
> relatively simple. I've not looked at the details or the patch, so I
> can't comment there, just that in principle this should be a
> relatively small added feature on top of the existing memory model and
> atomic operation abstractions in LLVM.
>  
>         Note also that, if I'm remembering correctly, the __atomic_*
>         builtins
>         (http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/_005f_005fatomic-Builtins.html)
>         were added by gcc, and don't have quite the same semantics as
>         the C11
>         operations in ways I don't remember. libstdc++ compiles to
>         these. The
>         __c11_atomic_ builtins
>         (http://clang.llvm.org/docs/LanguageExtensions.html#c11-atomic-builtins)
>         are what libc++ uses, and match the C11 spec very closely.
>         That means
>         that if gcc takes a change to the __atomic_ builtins, it's
>         probably a
>         good idea for Clang to take it too, even if it's not quite
>         right
>         semantically.
> 
> 
> To tease this apart a bit more, there are in fact three layers:
> 
> 
> 1) The base case: we must have a single spec for the LLVM IR model.
> This should be tailored to the needs of optimizers, general enough to
> represent the various builtins, and still support efficient lowering
> to both X86 and potentially PPC implementations.
> 
> 
> 2) Frontend support that matches the standards for C and/or C++ (the
> __c11_atomic_.... builtins in Clang today).
> 
> 
> 3) Any compatibility mappings from GCC builtins to #1 to support
> compiling libstdc++ (the __atomic_... builtins in Clang today).
> 
> 





More information about the llvm-commits mailing list