[llvmlinux] Fwd: Re: [GIT PULL] locking fix

Behan Webster behanw at converseincode.com
Mon Oct 28 19:01:49 UTC 2013


> I know the LLVM people had similar issues with this comparison, so
> these days it's not even just about gcc versions. We may never have
> cared very much about icc, but llvm is actually an interesting target
> compiler.
>
>             Linus
W00t! :)

Behan

-------- Original Message --------
Subject: 	Re: [GIT PULL] locking fix
Date: 	Sun, 27 Oct 2013 12:51:24 -0700
From: 	Linus Torvalds <torvalds at linux-foundation.org>
To: 	Maarten Lankhorst <maarten.lankhorst at canonical.com>
CC: 	Ingo Molnar <mingo at kernel.org>, Linux Kernel Mailing List
<linux-kernel at vger.kernel.org>, Peter Zijlstra <a.p.zijlstra at chello.nl>,
Thomas Gleixner <tglx at linutronix.de>, Andrew Morton
<akpm at linux-foundation.org>



On Sun, Oct 27, 2013 at 12:37 PM, Maarten Lankhorst
<maarten.lankhorst at canonical.com> wrote:
>
> I would love for a compiler to become that smart though, but I do not think it's likely.

Dammit, even if that is true, then write the conditional *correctly*.

As mentioned, the conditional

    __builtin_constant_p(ww_ctx) && ww_ctx == NULL

is actually sensible, in a way the original one was *not*. It actually
tests what you apparently intended to test, and is more readable to
humans to boot.

And no, it still isn't actually guaranteed to do what you want it to
do. Historically, in gcc, __builtin_constant_p() really only ever
worked in macros, because by the time you use it in inline functions,
a constant NULL in the caller will have been turned into a argument
variable in the inline function, and __builtin_constant_p() would be
done before that was optimized away. Over the years, gcc has pushed
some of the builtin evaluation deeper down, and these days it actually
works within inline functions, but my point that
__builtin_constant_p() is about a certain level of compiler
optimization is very much true: you're actually testing for a compiler
optimization detail.

I know the LLVM people had similar issues with this comparison, so
these days it's not even just about gcc versions. We may never have
cared very much about icc, but llvm is actually an interesting target
compiler.

            Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linuxfoundation.org/pipermail/llvmlinux/attachments/20131028/664a9463/attachment.html>


More information about the LLVMLinux mailing list