allow gcc4 to control inlining
PATCH 1/2 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.
----
include/linux/compiler-gcc4.h | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-)
include/linux/compiler-gcc4.h +5 -4
@@ -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)
Quoted 5 lines · Ingo Molnar
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 <[email protected]>Signed-off-by Arjan van de Ven <[email protected]>
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.
Signature · 1 line
Mathematics is the supreme nostalgia of our time.
Quoted 4 lines · Matt Mackall
Quoted 3 lines · Ingo Molnar
allow gcc4 compilers to decide what to inline and what not - instead of the kernel forcing gcc to inline all the time.
Quoted 8 lines
Quoted 2 lines
Signed-off-by Ingo Molnar <[email protected]>Signed-off-by Arjan van de Ven <[email protected]>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 <[email protected]>
FYI, the max function-frame size did not change, so there's no outrageous frames like with gcc3, just a small shift upwards.
Ingo
Quoted 10 lines · Ingo Molnar
Quoted 7 lines · Matt Mackall
Quoted 5 lines · Ingo Molnar
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 <[email protected]>Signed-off-by Arjan van de Ven <[email protected]>
Quoted 8 lines
Quoted 5 lines
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 <[email protected]>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.
Signature · 1 line
Mathematics is the supreme nostalgia of our time.
include/linux/compiler-gcc4.h line 8
Quoted 3 lines
include/linux/compiler-gcc4.h +0
-3-#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:
include/linux/compiler-gcc4.h line 8
Quoted 3 lines
include/linux/compiler-gcc4.h +3
-0+#define inline inline +#define __inline__ __inline__ +#define __inline __inline
seems pointless to me.
- R.
Quoted 11 lines · Roland Dreier
Review
Quoted 3 lines
(quoted diff) +0
-3-#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:
Review
Quoted 3 lines
(quoted diff) +3
-0+#define inline inline +#define __inline__ __inline__ +#define __inline __inlineseems 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.
----
include/linux/compiler-gcc4.h | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-)
include/linux/compiler-gcc4.h +2 -4
@@ -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)
include/linux/compiler-gcc4.h line 16
Quoted 7 lines · Ingo Molnar
allow gcc4 compilers to decide what to inline and what not - instead of the kernel forcing gcc to inline all the time.
include/linux/compiler-gcc4.h +2
-0+#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...
Quoted 12 lines · Al Viro
include/linux/compiler-gcc4.h line 16
Quoted 7 lines · Ingo Molnar
allow gcc4 compilers to decide what to inline and what not - instead of the kernel forcing gcc to inline all the time.
include/linux/compiler-gcc4.h +2
-0+#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_inlinewhere it is needed now...
Quoted 3 lines
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)