Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[patch 01/2] allow gcc4 to control inlining

0 views
Skip to first unread message

Ingo Molnar

unread,
Dec 28, 2005, 6:47:46 AM12/28/05
to lkml, Linus Torvalds, Andrew Morton, Arjan van de Ven, Matt Mackall
allow gcc4 compilers to decide what to inline and what not - instead
of the kernel forcing gcc to inline all the time.

Signed-off-by: Ingo Molnar <mi...@elte.hu>
Signed-off-by: Arjan van de Ven <ar...@infradead.org>
----

include/linux/compiler-gcc4.h | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)

Index: linux/include/linux/compiler-gcc4.h
===================================================================
--- linux.orig/include/linux/compiler-gcc4.h
+++ linux/include/linux/compiler-gcc4.h
@@ -3,14 +3,15 @@
/* These definitions are for GCC v4.x. */
#include <linux/compiler-gcc.h>

-#define inline inline __attribute__((always_inline))
-#define __inline__ __inline__ __attribute__((always_inline))
-#define __inline __inline __attribute__((always_inline))
+#define inline inline
+#define __inline__ __inline__
+#define __inline __inline
#define __deprecated __attribute__((deprecated))
#define __attribute_used__ __attribute__((__used__))
#define __attribute_pure__ __attribute__((pure))
#define __attribute_const__ __attribute__((__const__))
-#define noinline __attribute__((noinline))
+#define noinline __attribute__((noinline))
+#define __always_inline inline __attribute__((always_inline))
#define __must_check __attribute__((warn_unused_result))
#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)

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

Matt Mackall

unread,
Dec 28, 2005, 9:30:41 AM12/28/05
to Ingo Molnar, lkml, Linus Torvalds, Andrew Morton, Arjan van de Ven
On Wed, Dec 28, 2005 at 12:46:53PM +0100, Ingo Molnar wrote:
> allow gcc4 compilers to decide what to inline and what not - instead
> of the kernel forcing gcc to inline all the time.
>
> Signed-off-by: Ingo Molnar <mi...@elte.hu>
> Signed-off-by: Arjan van de Ven <ar...@infradead.org>

I'm ever so slightly wary of GCC 4's stack size logic for functions with
nested scopes, but I think we'll have no trouble catching any trouble
cases in 2.6.16-rc.

Acked-by: Matt Mackall <m...@selenic.com>

--
Mathematics is the supreme nostalgia of our time.

Ingo Molnar

unread,
Dec 28, 2005, 9:35:34 AM12/28/05
to Matt Mackall, lkml, Linus Torvalds, Andrew Morton, Arjan van de Ven

* Matt Mackall <m...@selenic.com> wrote:

> On Wed, Dec 28, 2005 at 12:46:53PM +0100, Ingo Molnar wrote:
> > allow gcc4 compilers to decide what to inline and what not - instead
> > of the kernel forcing gcc to inline all the time.
> >
> > Signed-off-by: Ingo Molnar <mi...@elte.hu>
> > Signed-off-by: Arjan van de Ven <ar...@infradead.org>
>
> I'm ever so slightly wary of GCC 4's stack size logic for functions
> with nested scopes, but I think we'll have no trouble catching any
> trouble cases in 2.6.16-rc.
>
> Acked-by: Matt Mackall <m...@selenic.com>

FYI, the max function-frame size did not change, so there's no
outrageous frames like with gcc3, just a small shift upwards.

Ingo

Matt Mackall

unread,
Dec 28, 2005, 9:40:12 AM12/28/05
to Ingo Molnar, lkml, Linus Torvalds, Andrew Morton, Arjan van de Ven
On Wed, Dec 28, 2005 at 03:34:42PM +0100, Ingo Molnar wrote:
>
> * Matt Mackall <m...@selenic.com> wrote:
>
> > On Wed, Dec 28, 2005 at 12:46:53PM +0100, Ingo Molnar wrote:
> > > allow gcc4 compilers to decide what to inline and what not - instead
> > > of the kernel forcing gcc to inline all the time.
> > >
> > > Signed-off-by: Ingo Molnar <mi...@elte.hu>
> > > Signed-off-by: Arjan van de Ven <ar...@infradead.org>
> >
> > I'm ever so slightly wary of GCC 4's stack size logic for functions
> > with nested scopes, but I think we'll have no trouble catching any
> > trouble cases in 2.6.16-rc.
> >
> > Acked-by: Matt Mackall <m...@selenic.com>
>
> FYI, the max function-frame size did not change, so there's no
> outrageous frames like with gcc3, just a small shift upwards.

My point is more that I wouldn't be surprised if we found a corner
case for a particular .config. But even with GCC 3 and 4k stacks,
automatic inlining worked just fine for most configs after killing
just a few offenders.

--
Mathematics is the supreme nostalgia of our time.

Roland Dreier

unread,
Dec 28, 2005, 9:40:32 AM12/28/05
to Ingo Molnar, lkml, Linus Torvalds, Andrew Morton, Arjan van de Ven, Matt Mackall
> -#define inline inline __attribute__((always_inline))
> -#define __inline__ __inline__ __attribute__((always_inline))
> -#define __inline __inline __attribute__((always_inline))

Why not just delete these lines? This:

> +#define inline inline
> +#define __inline__ __inline__
> +#define __inline __inline

seems pointless to me.

- R.

Ingo Molnar

unread,
Dec 28, 2005, 9:54:24 AM12/28/05
to Roland Dreier, lkml, Linus Torvalds, Andrew Morton, Arjan van de Ven, Matt Mackall

* Roland Dreier <rdr...@cisco.com> wrote:

> > -#define inline inline __attribute__((always_inline))
> > -#define __inline__ __inline__ __attribute__((always_inline))
> > -#define __inline __inline __attribute__((always_inline))
>
> Why not just delete these lines? This:
>
> > +#define inline inline
> > +#define __inline__ __inline__
> > +#define __inline __inline
>
> seems pointless to me.

indeed. I thought they were redefined to a default if not defined, but
that's only the case for __always_inline. Updated patch below.

Ingo

--------
Subject: allow gcc4 to control inlining

allow gcc4 compilers to decide what to inline and what not - instead
of the kernel forcing gcc to inline all the time.

Signed-off-by: Ingo Molnar <mi...@elte.hu>
Signed-off-by: Arjan van de Ven <ar...@infradead.org>

----

include/linux/compiler-gcc4.h | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)

Index: linux/include/linux/compiler-gcc4.h
===================================================================
--- linux.orig/include/linux/compiler-gcc4.h
+++ linux/include/linux/compiler-gcc4.h

@@ -3,14 +3,12 @@


/* These definitions are for GCC v4.x. */
#include <linux/compiler-gcc.h>

-#define inline inline __attribute__((always_inline))
-#define __inline__ __inline__ __attribute__((always_inline))
-#define __inline __inline __attribute__((always_inline))

#define __deprecated __attribute__((deprecated))
#define __attribute_used__ __attribute__((__used__))
#define __attribute_pure__ __attribute__((pure))
#define __attribute_const__ __attribute__((__const__))
-#define noinline __attribute__((noinline))
+#define noinline __attribute__((noinline))
+#define __always_inline inline __attribute__((always_inline))
#define __must_check __attribute__((warn_unused_result))
#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)

Al Viro

unread,
Dec 28, 2005, 1:39:52 PM12/28/05
to Ingo Molnar, lkml, Linus Torvalds, Andrew Morton, Arjan van de Ven, Matt Mackall
On Wed, Dec 28, 2005 at 12:46:53PM +0100, Ingo Molnar wrote:
> allow gcc4 compilers to decide what to inline and what not - instead
> of the kernel forcing gcc to inline all the time.

> +#define noinline __attribute__((noinline))


> +#define __always_inline inline __attribute__((always_inline))
> #define __must_check __attribute__((warn_unused_result))
> #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)

You seem to be missing the rest of the patch - namely, addition of
always_inline where it is needed now...

Note that we *do* need it in quite a few places. Anything that relies on
dead code elimination to kill a call of function that doesn't exist
would better be always inlined...

Arjan van de Ven

unread,
Dec 28, 2005, 2:52:54 PM12/28/05
to Al Viro, lkml
On Wed, 2005-12-28 at 18:39 +0000, Al Viro wrote:
> On Wed, Dec 28, 2005 at 12:46:53PM +0100, Ingo Molnar wrote:
> > allow gcc4 compilers to decide what to inline and what not - instead
> > of the kernel forcing gcc to inline all the time.
>
> > +#define noinline __attribute__((noinline))
> > +#define __always_inline inline __attribute__((always_inline))
> > #define __must_check __attribute__((warn_unused_result))
> > #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
>
> You seem to be missing the rest of the patch - namely, addition of
> always_inline where it is needed now...
>
> Note that we *do* need it in quite a few places. Anything that relies on
> dead code elimination to kill a call of function that doesn't exist
> would better be always inlined...

on x86-64 that seems to only be fix_to_virt though.. so it's really not
that many.

(based on making "inline" a define for noinline and then an
allyesconfig)

0 new messages