Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Jul 2024 12:05:52 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Warner Losh <imp@freebsd.org>, src-committers@freebsd.org,  dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: 2508372b7b46 - main - cdefs.h: Assume the compiler supports at least GNU C 3.0 extensions
Message-ID:  <CANCZdfo1W2yFSc2kCtZZ%2BN7f970upyRmrA3VivY9ctd5ax91vQ@mail.gmail.com>
In-Reply-To: <7ca0ab94-4d5e-405e-b178-84ef3d8ebc8d@FreeBSD.org>
References:  <202406210241.45L2fNU2056962@gitrepo.freebsd.org> <7ca0ab94-4d5e-405e-b178-84ef3d8ebc8d@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
Hey John,

On Mon, Jul 1, 2024 at 3:49 PM John Baldwin <jhb@freebsd.org> wrote:

> On 6/20/24 7:41 PM, Warner Losh wrote:
> > The branch main has been updated by imp:
> >
> > URL:
> https://cgit.FreeBSD.org/src/commit/?id=2508372b7b46117a9fb801b50624265d30888442
> >
> > commit 2508372b7b46117a9fb801b50624265d30888442
>
...

> > -/*
> > - * GNU C version 2.96 adds explicit branch prediction so that
> > - * the CPU back-end can hint the processor and also so that
> > - * code blocks can be reordered such that the predicted path
> > - * sees a more linear flow, thus improving cache behavior, etc.
> > - *
> > - * The following two macros provide us with a way to utilize this
> > - * compiler feature.  Use __predict_true() if you expect the expression
> > - * to evaluate to true, and __predict_false() if you expect the
> > - * expression to evaluate to false.
> > - *
> > - * A few notes about usage:
> > - *
> > - *   * Generally, __predict_false() error condition checks (unless
> > - *     you have some _strong_ reason to do otherwise, in which case
> > - *     document it), and/or __predict_true() `no-error' condition
> > - *     checks, assuming you want to optimize for the no-error case.
> > - *
> > - *   * Other than that, if you don't know the likelihood of a test
> > - *     succeeding from empirical or other `hard' evidence, don't
> > - *     make predictions.
> > - *
> > - *   * These are meant to be used in places that are run `a lot'.
> > - *     It is wasteful to make predictions in code that is run
> > - *     seldomly (e.g. at subsystem initialization time) as the
> > - *     basic block reordering that this affects can often generate
> > - *     larger code.
> > - */
> > -#if __GNUC_PREREQ__(2, 96)
> >   #define     __predict_true(exp)     __builtin_expect((exp), 1)
> >   #define     __predict_false(exp)    __builtin_expect((exp), 0)
> > -#else
> > -#define      __predict_true(exp)     (exp)
> > -#define      __predict_false(exp)    (exp)
> > -#endif
>
> I think the comment was worth keeping around.  You just need to modify
> the start of it to "Modern compilers include explicit branch prediction..."
> In particular, I think our current practice is still to apply prediction
> hints rather conservatively.
>

That's a fair point I hadn't considered. https://reviews.freebsd.org/D45837
adds it back with some tiny tweaks to the language, justification, etc.

Warner

[-- Attachment #2 --]
<div dir="ltr"><div dir="ltr">Hey John,<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 1, 2024 at 3:49 PM John Baldwin &lt;<a href="mailto:jhb@freebsd.org">jhb@freebsd.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 6/20/24 7:41 PM, Warner Losh wrote:<br>
&gt; The branch main has been updated by imp:<br>
&gt; <br>
&gt; URL: <a href="https://cgit.FreeBSD.org/src/commit/?id=2508372b7b46117a9fb801b50624265d30888442" rel="noreferrer" target="_blank">https://cgit.FreeBSD.org/src/commit/?id=2508372b7b46117a9fb801b50624265d30888442</a><br>;
&gt; <br>
&gt; commit 2508372b7b46117a9fb801b50624265d30888442<br></blockquote><div>... </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">&gt; -/*<br>
&gt; - * GNU C version 2.96 adds explicit branch prediction so that<br>
&gt; - * the CPU back-end can hint the processor and also so that<br>
&gt; - * code blocks can be reordered such that the predicted path<br>
&gt; - * sees a more linear flow, thus improving cache behavior, etc.<br>
&gt; - *<br>
&gt; - * The following two macros provide us with a way to utilize this<br>
&gt; - * compiler feature.  Use __predict_true() if you expect the expression<br>
&gt; - * to evaluate to true, and __predict_false() if you expect the<br>
&gt; - * expression to evaluate to false.<br>
&gt; - *<br>
&gt; - * A few notes about usage:<br>
&gt; - *<br>
&gt; - *   * Generally, __predict_false() error condition checks (unless<br>
&gt; - *     you have some _strong_ reason to do otherwise, in which case<br>
&gt; - *     document it), and/or __predict_true() `no-error&#39; condition<br>
&gt; - *     checks, assuming you want to optimize for the no-error case.<br>
&gt; - *<br>
&gt; - *   * Other than that, if you don&#39;t know the likelihood of a test<br>
&gt; - *     succeeding from empirical or other `hard&#39; evidence, don&#39;t<br>
&gt; - *     make predictions.<br>
&gt; - *<br>
&gt; - *   * These are meant to be used in places that are run `a lot&#39;.<br>
&gt; - *     It is wasteful to make predictions in code that is run<br>
&gt; - *     seldomly (e.g. at subsystem initialization time) as the<br>
&gt; - *     basic block reordering that this affects can often generate<br>
&gt; - *     larger code.<br>
&gt; - */<br>
&gt; -#if __GNUC_PREREQ__(2, 96)<br>
&gt;   #define     __predict_true(exp)     __builtin_expect((exp), 1)<br>
&gt;   #define     __predict_false(exp)    __builtin_expect((exp), 0)<br>
&gt; -#else<br>
&gt; -#define      __predict_true(exp)     (exp)<br>
&gt; -#define      __predict_false(exp)    (exp)<br>
&gt; -#endif<br>
<br>
I think the comment was worth keeping around.  You just need to modify<br>
the start of it to &quot;Modern compilers include explicit branch prediction...&quot;<br>
In particular, I think our current practice is still to apply prediction<br>
hints rather conservatively.<br></blockquote><div><br></div><div>That&#39;s a fair point I hadn&#39;t considered. <a href="https://reviews.freebsd.org/D45837">https://reviews.freebsd.org/D45837</a></div><div>adds it back with some tiny tweaks to the language, justification, etc.</div><div><br></div><div>Warner </div></div></div>

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfo1W2yFSc2kCtZZ%2BN7f970upyRmrA3VivY9ctd5ax91vQ>