public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* __attribute__((always_inline)) fiasco
@ 2004-09-23 16:26 Albert Cahalan
  2004-09-23 16:50 ` William Lee Irwin III
  2004-09-23 16:54 ` Richard Henderson
  0 siblings, 2 replies; 13+ messages in thread
From: Albert Cahalan @ 2004-09-23 16:26 UTC (permalink / raw)
  To: linux-kernel mailing list; +Cc: rth

> I'm displeased with someone's workaround for decisions made by
> the (rather weak) inliner in gcc 3.[123].  In particular, that
> someone doesn't understand all of the implications of always_inline.
...
> In the Alpha port I have a number of places in which I have 
> functions that I would like inlined when they are called directly,
> but I also need to take their address so that they may be registered
> as part of a dispatch vector for the specific machine model.
>
> This scheme fails because my functions got marked always_inline
> behind my back, which means they didn't get emitted in the right
> place.

If it hurts, don't do that. It looks like bloat anyway.

Are benchmarks significantly affected if you remove the inline?
If so, simply have a second function:

extern void uninline_foo(void);
...
void uninline_foo(void)
{
        foo();
}

> Rather than fight the unwinnable fight to remove this hack entirely,
> may I ask that at least one of the different names for inline, e.g.
> __inline__, be left un-touched so that it can be used by those that
> understand what the keyword is supposed to mean?
>
> Of course, there does not exist a variant that isn't used by all
> sorts of random code, so presumably all existing occurences would
> have to get renamed to plan "inline" in order to keep people happy..

Hey, I argued for INLINE when the static/extern changes
came along. That's the sanest, because one never knows
what the next annoying compiler will demand. Then you
can have one of:

#define INLINE
#define INLINE inline
#define INLINE static inline  // an oxymoron
#define INLINE extern inline  // an oxymoron
#define INLINE __force_inline
#define INLINE __attribute__((always_inline))
#define INLINE _Pragma("inline")
#define INLINE __inline_or_die_you_foul_compiler
#define INLINE _Please inline



^ permalink raw reply	[flat|nested] 13+ messages in thread
* __attribute__((always_inline)) fiasco
@ 2004-09-23  8:47 Richard Henderson
  0 siblings, 0 replies; 13+ messages in thread
From: Richard Henderson @ 2004-09-23  8:47 UTC (permalink / raw)
  To: linux-kernel, torvalds

I'm displeased with someone's workaround for decisions made by
the (rather weak) inliner in gcc 3.[123].  In particular, that
someone doesn't understand all of the implications of always_inline.

This attribute was invented to handle certain cases in <altivec.h>
and <xmmintrin.h> that contain assembly instructions that require
constant arguments.  These instructions *cannot* be emitted unless
the user of the function supplies a constant.  Which, under normal
usage situations is not a problem -- when the user doesn't give us
a constant, we error and that's the end.  But it does mean that 
the compiler is specifically *not* allowed to emit an out-of-line
copy of such a function, since there is in fact no way to legally
do so.

In the Alpha port I have a number of places in which I have 
functions that I would like inlined when they are called directly,
but I also need to take their address so that they may be registered
as part of a dispatch vector for the specific machine model.

This scheme fails because my functions got marked always_inline
behind my back, which means they didn't get emitted in the right
place.

Rather than fight the unwinnable fight to remove this hack entirely,
may I ask that at least one of the different names for inline, e.g.
__inline__, be left un-touched so that it can be used by those that
understand what the keyword is supposed to mean?

Of course, there does not exist a variant that isn't used by all
sorts of random code, so presumably all existing occurences would
have to get renamed to plan "inline" in order to keep people happy...


r~

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2004-09-30 16:20 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-09-23 16:26 __attribute__((always_inline)) fiasco Albert Cahalan
2004-09-23 16:50 ` William Lee Irwin III
2004-09-23 16:59   ` Albert Cahalan
2004-09-23 17:03   ` Richard Henderson
2004-09-23 17:21   ` viro
2004-09-23 17:33     ` William Lee Irwin III
2004-09-23 17:39       ` viro
2004-09-26  1:29   ` Tonnerre
2004-09-26  2:05     ` William Lee Irwin III
2004-09-30 16:19       ` Bill Davidsen
2004-09-23 16:54 ` Richard Henderson
2004-09-23 17:46   ` Albert Cahalan
  -- strict thread matches above, loose matches on Subject: below --
2004-09-23  8:47 Richard Henderson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox