[llvm-commits] [llvm] r116832 - /llvm/trunk/include/llvm/PassSupport.h

Bill Wendling wendling at apple.com
Tue Oct 19 12:54:18 PDT 2010


On Oct 19, 2010, at 11:02 AM, Owen Anderson wrote:

> Author: resistor
> Date: Tue Oct 19 13:02:06 2010
> New Revision: 116832
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=116832&view=rev
> Log:
> Factor out the call-once implementation into its own macro.
> 
> Modified:
>    llvm/trunk/include/llvm/PassSupport.h
> 
> Modified: llvm/trunk/include/llvm/PassSupport.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassSupport.h?rev=116832&r1=116831&r2=116832&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/PassSupport.h (original)
> +++ llvm/trunk/include/llvm/PassSupport.h Tue Oct 19 13:02:06 2010
> @@ -129,6 +129,22 @@
>   PassInfo(const PassInfo &);       // do not implement
> };
> 
> +#define CALL_ONCE_INITIALIZATION(function) \
> +  static volatile sys::cas_flag initialized = 0; \
> +  sys::cas_flag old_val = sys::CompareAndSwap(&initialized, 1, 0); \
> +  if (old_val == 0) { \
> +    function(Registry); \
> +    sys::MemoryFence(); \
> +    initialized = 2; \
> +  } else { \
> +    sys::cas_flag tmp = initialized; \
> +    sys::MemoryFence(); \
> +    while (tmp != 2) { \
> +      tmp = initialized; \
> +      sys::MemoryFence(); \
> +    } \
> +  } \
> +

Could you remove the final backslash here? It's not needed and relies upon proper spacing in the file. (And is a pet peeve of mine. :-)

-bw

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101019/9fff07d7/attachment.html>


More information about the llvm-commits mailing list