All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <David.Laight@ACULAB.COM>
To: 'Arnd Bergmann' <arnd@kernel.org>,
	"'linux-kernel@vger.kernel.org'" <linux-kernel@vger.kernel.org>,
	Linus Torvalds <torvalds@linuxfoundation.org>
Cc: Matthew Wilcox <willy@infradead.org>,
	Christoph Hellwig <hch@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
	Dan Carpenter <dan.carpenter@linaro.org>,
	"Jason A . Donenfeld" <Jason@zx2c4.com>,
	"'pedro.falcato@gmail.com'" <pedro.falcato@gmail.com>,
	Mateusz Guzik <mjguzik@gmail.com>,
	"'linux-mm@kvack.org'" <linux-mm@kvack.org>
Subject: RE: [PATCH 7/7] minmax: minmax: Add __types_ok3() and optimise defines with 3 arguments
Date: Thu, 25 Jul 2024 09:07:32 +0000	[thread overview]
Message-ID: <f093cc1b170b45839f06b3fbe7df5d2f@AcuMS.aculab.com> (raw)
In-Reply-To: <1bb3d09c-3b34-4348-8d6f-bd867704625c@app.fastmail.com>

From: Arnd Bergmann
> Sent: 24 July 2024 18:04
> 
> On Wed, Jul 24, 2024, at 16:33, David Laight wrote:
> > min3() and max3() were added to optimise nested min(x, min(y, z))
> > sequences, bit only moved where the expansion was requiested.
> >
> > Add a separate implementation for 3 argument calls.
> > These are never required to generate constant expressiions to
> > remove that logic.
> >
> > Signed-off-by: David Laight <david.laight@aculab.com>
> 
> This brings another 3x improvement in the size of the expansion
> and build speed.
> 
> > +#define __cmp_once3(op, x, y, z, uniq) ({	\
> > +	typeof(x) __x_##uniq = (x);		\
> > +	typeof(x) __y_##uniq = (y);		\
> > +	typeof(x) __z_##uniq = (z);		\
> > +	__cmp(op, __cmp(op, __x_##uniq, __y_##uniq), __z_##uniq); })
> 
> This still has a nested call to __cmp(), which makes the
> resulting expression bigger than necessary.
> 
> The three typeof(x) should be x/y/z, right?

Ooops...

> Using __auto_type
> would avoid the bug and also remove one more variable expansion.

I'd thought that as well.
But hadn't looked up the syntax.

> Using another temporary variable, plus the use of __auto_type
> brings the example line from xen/setup.c down 750KB to 530KB,
> and the compile speed from 0.5s to 0.34s.
> 
>  #define __cmp_once3(op, x, y, z, uniq) ({      \
>        __auto_type __x_##uniq = (x);           \
>        __auto_type __y_##uniq = (y);           \
>        __auto_type __z_##uniq = (z);           \
>        __auto_type __xy##uniq = __cmp(op, __x_##uniq, __y_##uniq); \
>        __cmp(op, __xy_##uniq, __z_##uniq); })
> 
> The __auto_type change can also be applied to the other typeof()
> in this file.

True.

	David

> 
>       Arnd

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)



  reply	other threads:[~2024-07-25  9:08 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-24 14:26 [PATCH 0/7] minmax: reduce compilation time David Laight
2024-07-24 14:28 ` [PATCH 1/7] minmax: Put all the clamp() definitions together David Laight
2024-07-24 14:29 ` [PATCH 2/7] minmax: Use _Static_assert() instead of static_assert() David Laight
2024-07-24 14:29 ` [PATCH 3/7] compiler.h: Add __if_constexpr(expr, if_const, if_not_const) David Laight
2024-07-24 17:32   ` Arnd Bergmann
2024-07-25  9:12     ` David Laight
2024-07-24 19:48   ` Linus Torvalds
2024-07-25  8:45     ` David Laight
2024-07-24 14:30 ` [PATCH 4/7] minmax: Simplify signedness check David Laight
2024-07-24 16:48   ` Arnd Bergmann
2024-07-24 20:02     ` Linus Torvalds
2024-07-25  9:00       ` David Laight
2024-07-25 17:02         ` Linus Torvalds
2024-07-26  9:43           ` Lorenzo Stoakes
2024-07-26 12:57             ` David Laight
2024-07-26 13:27               ` Lorenzo Stoakes
2024-07-25 13:24   ` kernel test robot
2024-07-25 16:39     ` David Laight
2024-07-24 14:31 ` [PATCH 5/7] minmax: Factor out the zero-extension logic from umin/umax David Laight
2024-07-24 14:32 ` [PATCH 6/7] minmax: Optimise _Static_assert() check in clamp() David Laight
2024-07-24 14:33 ` [PATCH 7/7] minmax: minmax: Add __types_ok3() and optimise defines with 3 arguments David Laight
2024-07-24 17:03   ` Arnd Bergmann
2024-07-25  9:07     ` David Laight [this message]
2024-07-24 19:34 ` [PATCH 0/7] minmax: reduce compilation time Lorenzo Stoakes
2024-07-24 19:52   ` Linus Torvalds
2024-07-26 18:12     ` Lorenzo Stoakes
2024-07-26 18:24       ` Linus Torvalds
2024-07-26 18:56         ` Lorenzo Stoakes
2024-07-26 19:21           ` Lorenzo Stoakes
2024-07-26 21:36             ` Linus Torvalds
2024-07-26 21:46               ` Jens Axboe
2024-07-26 22:48               ` Linus Torvalds
2024-07-27 15:30                 ` Jens Axboe
2024-07-27 15:38                   ` Jens Axboe
2024-07-27 16:31                     ` Lorenzo Stoakes
2024-07-27 16:36                       ` Jens Axboe
2024-07-27 16:41                         ` Lorenzo Stoakes
2024-07-27 16:52                           ` Jens Axboe
2024-07-27 16:56                             ` Lorenzo Stoakes
2024-07-28 11:32                       ` David Laight
2024-07-27  4:13               ` Linus Torvalds
2024-07-27  4:14                 ` Linus Torvalds
2024-07-27  8:08                 ` David Laight
2024-07-27 18:58                   ` Lorenzo Stoakes
2024-07-27 19:21                     ` Linus Torvalds
2024-07-28 11:17                     ` David Laight
2024-07-28 13:07                       ` Lorenzo Stoakes
2024-07-27 17:33                 ` Matthew Wilcox
2024-07-27 18:16                   ` Linus Torvalds
2024-07-27  8:07             ` Lorenzo Stoakes
2024-07-27 16:26               ` Linus Torvalds
2024-07-27 18:44                 ` Lorenzo Stoakes
2024-07-30  4:10                 ` Linus Torvalds
2024-07-30 10:36                   ` Arnd Bergmann
2024-07-28 17:57           ` Geert Uytterhoeven
2024-07-28 18:43             ` Lorenzo Stoakes
2024-07-26 21:32         ` David Laight
2024-07-26 21:38           ` Linus Torvalds

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f093cc1b170b45839f06b3fbe7df5d2f@AcuMS.aculab.com \
    --to=david.laight@aculab.com \
    --cc=Jason@zx2c4.com \
    --cc=akpm@linux-foundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=arnd@kernel.org \
    --cc=dan.carpenter@linaro.org \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mjguzik@gmail.com \
    --cc=pedro.falcato@gmail.com \
    --cc=torvalds@linuxfoundation.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.