public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-17 20:14 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-17 20:14 UTC (permalink / raw)
  To: austern, dewar; +Cc: gcc, ralmquist

> There are already compilers that do this.  (State of the art "SPEC 
> warrior" compilers, of course.)  gcc isn't one of them, and I agree 
> that gcc is unlikely to get all of these features any time soon, but 
> this really is production technology, not magical wishful thinking.

I would need to see more than a vague claim to believe that a compiler
can do a good job of implicit inlining without hints.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-18 15:03 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-18 15:03 UTC (permalink / raw)
  To: s.bosscher, schwab; +Cc: gcc, ralmquist

> Yes, I suppose it does, but it's less than elegant, and it's patronizing
> the user.  Especially in 'C', when people use "inline" they usually mean
> "inline".  Again, for C++ things may be different.

If you really meant that then you would want it to be a fatal error if
the compiler could not inline the function. I doubt many people want that.
I think they say inline to tell the compiler to make calls faster if
possible. 

There is a big difference between

inline this to speed it up, but if you can't OK (the standards' view
of inline)

and

inline or else the program is wrong, and fail if you can't inline it, 
because I am inlining it for semantic reasons that are outside the
scope of the standard.

Both mechanisms are useful, and should be present, and are. Why should it
be "patronizing" for the compiler to take the view of inline that is
taken by the standard.

Now if you are complaining that the compiler is too reluctant to inline,
that's a perfectly acceptable complaint, but it is a complaint about
optimization, not about correct implementation.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-18  5:50 Robert Dewar
  2003-03-18  5:50 ` Gabriel Dos Reis
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-18  5:50 UTC (permalink / raw)
  To: dewar, gdr; +Cc: aoliva, bernds, gcc, geoffk, jbuck

> I agree with that.  But that is not an argument to ignore the inline
> implied by in-class function definition:  That is part of common C++
> styles of writing programs.

Well it might be. if typically this implicit inlining causes programs to
slow down by excessive inlining, then the compiler is probably choosing
wrong defaults.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-18  3:28 Robert Dewar
  2003-03-18  4:18 ` Gabriel Dos Reis
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-18  3:28 UTC (permalink / raw)
  To: gdr, jbuck; +Cc: aoliva, bernds, dewar, gcc, geoffk

> That would be a disaster on STL-like code where function-object's
> operator() are commonly defined in the enclosing class.  I can't see
> any compeling reason why we should introduce that artificial distinction

I think there is an argument for a differentiation here. If a programmer
specifies inline, I think the compiler should be more ready to inline it.
In my experience, the compiler does too much inlining at -O3, and often
slows things down, so perhaps the automatic threshhold should be reduced,
but I don't think that is a good reason for reducing the threshhold for
an explicit inline. I am not ready to agree with people who think that
inline must always be obeyed, but I do think the compiler should go to
extra efforts to follow the (hopefully informed) hints from the user.


If one had infinite knowledge, the threshhold would depend on how often
the function is called. The compiler doesn't know that, so it can't make
the threshhold depend on this. But if there is an explicit inline, it is
reasonably taken as a hint that the frequency will be significant, so it
makes sense to have a higher thresshhold.

As for "disaster" on STL, that seems a bit overheated. Obviously you want
to set the thressholds to prevent disaster :-)

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-17 20:11 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-17 20:11 UTC (permalink / raw)
  To: dewar, jbuck; +Cc: bernds, gcc, geoffk

> I am well aware that the standard states that "inline" is advisory, 
> but in a high-quality implementation this should be taken to just cover
> the cases where inlining the call is not possible or is extremely difficult.
> If the compiler can honor the user's request without jumping through
> too many hoops, it should do so.

A corollary of this is that you still should not *count* on inline
if it is necessary for correct semantics (in your framework, not the
standards). In this case the attribute should be used.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-17 17:10 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-17 17:10 UTC (permalink / raw)
  To: s.bosscher, schwab; +Cc: gcc, ralmquist

> Hmm, I tried to make a point that there is no such thing as "smart
> enough", only "smart enough for where it's tuned to be smart".  Really,
> I'd love to see really a smart inlining decision algorithm, but in the
> end a compiler will always just be guessing.


Actually for the general case of compilers getting smart enough, there
is a point at which the compiler becomes "smart enough", and that is when
in the most typical case, the compiler can do a better job than the
programmer. At this stage, that criterion is pretty much met for
register allocation, and we don't see people arguing that it is horrible
for the compiler to override the intentions of the preogrammer etc etc.

For the inlining case, it is indeed rather dubious that this criterion
can ever be met. Too much information is required, and too much stuff
has to be analyzed.

^ permalink raw reply	[flat|nested] 116+ messages in thread
[parent not found: <1047828505.4119.ezmlm@gcc.gnu.org>]
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-17  6:46 Robert Dewar
  2003-03-17 19:19 ` Matt Austern
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-17  6:46 UTC (permalink / raw)
  To: gcc, ralmquist

> In the future, I think that the compiler should have a better idea about 
> what should be inlined than the programmer.  Therefore, in the long run 
> GCC should ignore the inline keyword.


Seems unlikely! This would require full interprocedural interunit analysis
as well as frequency data. I think this is in the wishful thinking depratment.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-16 16:14 Robert Dewar
  2003-03-16 18:37 ` Bernd Schmidt
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-16 16:14 UTC (permalink / raw)
  To: bernds, dewar; +Cc: gcc, geoffk, jbuck

> You've been arguing that the compiler will be smart enough to decide on
> a case-by-case basis whether inlining is profitable.  To make such an
> informed decision, you surely need information about function sizes and
> execution frequencies, among several other things.  If this information
> is available, then a mere hint becomes redundant [*] since you can deduce
> the necessary conditions algorithmically.  OTOH, if such information is
> not available, then the compiler really has no business second-guessing
> the user.

I have argued nothing of the kind, please reread what I have written. What
I have said is that the compiler may have very good reasons in specific
cases which result in a decision not to inline a given function. In fact
you agree with this:

> within reason - I don't strongly object to not inlining
> functions that call alloca, for example

What makes you think that I disagree and expect this to be done
without reason?

> OTOH, if such information is
> not available, then the compiler really has no business second-guessing
> the user.

A clear case to second guess in the absence of inline always, is a case
in which inlining is known  by the compiler to result in slower code
than not inlining.

or one in which it might be possible to inline, but it is just too much of
a pain in the neck to do so (the alloca case is in this category I think).

GNAT has an option to warn if a function is not inlined when it is requested
to be inlined, I think this is a useful (optional) warning.

> Let me remind you that we are discussing the effects of a change in
> behaviour of our C compiler.  What Ada programmers do or don't do may be
> influenced by the behaviour of Ada compilers and might therefore not be
> entirely relevant.

I see no reason to think the Ada and C experiences should be different here,
other than that the Ada community has 20 years experience with this feature.
The intention and language in the relevant standards is essentially 
identical in my view. If you think there is a big difference here, I think
the burden of proof is on you to show that.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 23:04 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 23:04 UTC (permalink / raw)
  To: bernds, dewar; +Cc: Richard.Earnshaw, aph, austern, echristo, galibert, gcc

Bernd said

> > Now the compiler should react to this by actually doing the inlining if
> > indeed doing so can reasonbly be expected to improve execution time.
> 
> IMO this problem is AI-complete.


You missed the extreme importance of the word "reasonably". Generally
I would say this is like presumption in the law. If a programmer says
inline, the presumption is that inlining makes sense. Only if the
compiler has some very good reason for ignoring it, based on real
knowledge, should it be ignored. Otherwise reasonable behavior is to
believe the programmer. In Ada we find some cases which cause trouble
with inlining, in particular exception handlers can be problematical
in some cases.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 22:37 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 22:37 UTC (permalink / raw)
  To: bernds, dewar; +Cc: Richard.Earnshaw, aph, austern, echristo, galibert, gcc

> Paraphrased, this is equivalent to "I really don't know what's going on here,
> please make a decision for me".  We have support for this, it's called
> "-finline-functions".  For trivial situations like the one you describe, the
> compiler can usually make a good guess.

No, not at all, the decision to inline is almost always additionally 
informed by the knowledge that the function is called frequently, so
that inlining is worth while.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 21:41 Robert Dewar
  2003-03-16 15:38 ` Bernd Schmidt
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 21:41 UTC (permalink / raw)
  To: bernds, dewar; +Cc: gcc, geoffk, jbuck

> Well, you'd assume the person who adds "inline" has done measurements or
> looked at the generated assembly.

I think you would be entirely wrong. Certainly in Ada, I can promise you
that (this is looking at 20 years of extensive experience with the use
of pragma Inline) most Ada programmers don't know enough to look at the
assembly language, and very few have done measurements. Actually the task
of doing measurements on a function by function basis is virtually
impossible, since the choices interact, so if you have K functions
that are possible candidates you would have to do 2**K measurements.

Even programmers who do know assembly language really well (I am one, I have
written hundreds of thousands of lines of commercially delivered assembly)
find it harder and harder to look at an assembly listing and have a good
idea of how fast things will run. The behavior of modern processors with
multiple pipelines where dozens of instructions can be in-flight and
branch prediction algorithms are both complex and critical, can be extremely
difficult to understand accurately. The old days when each instruction
took bla time and you added bla+bla+... to get the execution time for
a sequence of instructions are long long gone.

In practice the decision to use pragma Inline is based most typically
on an assumption that the function is small, because the source is
small and simple, and a knowledge that it is called frequently.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 21:19 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 21:19 UTC (permalink / raw)
  To: dewar, schwab
  Cc: Richard.Earnshaw, aph, austern, bernds, echristo, galibert, gcc

> On the other hand, inlining a function can create great opportunities for
> constant folding.  This is the point where gcc is currently very weak
> because it bases its heuristics on the unfolded size of the inline
> function.

Good point, and sometimes you write an inlined function knowing that
it will collapse when inlined, and this is a case where you really
do know better than the compiler.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 19:51 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 19:51 UTC (permalink / raw)
  To: dewar, drow; +Cc: Richard.Earnshaw, aph, bernds, gcc

> Sure.  The programmer had better know that if he's marking things
> inline.

Think what you are saying. You are saying that the programmer must 
carefully study the cache architecture, and adapt the source program
accordingly. This means different decisions for different models of
the same architecture, this is really not practical. If you want to
operate that this level, you may as well write in assembler :-)

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 19:44 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 19:44 UTC (permalink / raw)
  To: Richard.Earnshaw, bernds, dewar; +Cc: aph, gcc

By the way, I apologize in advance for still using a mailer which does
not generate proper threading headers. I have just completed a transition
from a OS/2 to XP (very painful, and I miss OS/2 in many ways), and from
a nice editor (EPM) to a much less capable one, and this amount of 
transition has been a lot of work. I tried to find a mailer with the
same interface I am used to and proper headers, but the first couple of
attempts failed. So soon I will make a third transition in mailers, 
hopefully not as painful as the other two :-)

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 19:32 Robert Dewar
  2003-03-15 21:36 ` Bernd Schmidt
  2003-03-17 17:47 ` Joe Buck
  0 siblings, 2 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 19:32 UTC (permalink / raw)
  To: bernds, geoffk; +Cc: dewar, gcc, jbuck

> And why not?  If I add the "inline" keyword, I do it for a good reason (I
> want the function inlined).

even if it makes your program run slower? I think most programmers would
answer no .. they write inline to speed up their program, not slow it down
and make it bigger and slower :-)

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 19:30 Robert Dewar
  2003-03-15 20:52 ` Andreas Schwab
  2003-03-15 21:39 ` Bernd Schmidt
  0 siblings, 2 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 19:30 UTC (permalink / raw)
  To: austern, bernds; +Cc: Richard.Earnshaw, aph, dewar, echristo, galibert, gcc

> We can give users the choice.  In the past, "-finline-functions" let the
> compiler decide, and the "inline" keyword let the user decide.  There is
> no other possible use for the an "inline" keyword that makes any sense -
> if the compiler can randomly decide that it will override it, it is no
> longer serving a useful purpose [*]

That's an odd thing to say, given that both the Ada and the C standards find
that it serves a useful purpose even if the compiler can override. Of course
the randomly here is just rhetoric. You might as well say "if multiplication
can randomly be implemented by repeated addition, then it no longer serves
a useful purpose" [note that of course the language standard certainly permits
this implementation of multiplication].

What the inline keyword means is

"Speed is really important when calling this small function, you can if you
like use more space if it helps execution speed.

 I am guessing that a good idea would be to
inline the code at the point of each call and that this would help execution
speed. I base this guess on a naive view that the function likely generates
only a few instructions, so that the overhead of the instructions for
calling and returning will be significant, and this kind of inlining can
get rid of this overhead"

Now the compiler should react to this by actually doing the inlining if
indeed doing so can reasonbly be expected to improve execution time. But
there are a number of reasons why this may not be the case, often very
target dependent. Some examples:

  1. Increasing code space can increase instruction cache pressure, which
     is often a key element in execution efficiency.

  2. In some architectures, the call can help improve efficiency. For
     example, on the IBM 360, code has to be based, calling a function
     automatically bases the code, avoiding the need for allocating an
     extra base register and mucking with it.

  3. On some machines calls are particularly fast. For example, on the
     INMOS transputer, a call is remarkably fast, often close to free.

  4. A call is an unconditional jump, so is a simple return. On an
     architecture with good branch prediction and plenty of ILP it
     may well be the case that the call is operationally close to free

On the other side of the equation you have to worry about cache effects
requiring constant icache swapping. This occurs most often on a machine
with a one way direct icache. In fact this is such a potentially serious
effect that I would say that on such a machine, inline should almost
always be obeyed, but there are very few such machines around any more
(are there any?). Certainly a C programmer cannot be expected to mess
with inline directives based on the cache architecture, that sort of
thing is unreasonable and undesirable.

How does inline compare with register? The meaning of register is that
in the programmer's estimation, it is worth keeping a given variable in
a register. More accurately, the programmer is saying that references to
the variable will be frequent. Why do the above arguments for inline
not apply to register. Several reasons:

  Although we can enumerate the four points above, the fact of the matter
  is that the decision to inline is far more target independent than the
  selection of registers, which is so dependent on number of registers and
  ABI rules for register usage.

  Register allocation is for the most part a matter of local decision within
  a unit, whereas inlining is important across units. Compilers are rather
  good at decision making within a unit, much worse at interunit decisions.
  Indeed the best argument for register declarations is when they apply
  globally across units.

  We have really good algorithms in practice for figuring out what to put
  in registers. Partly this is because the problem is more studied than
  the inlining case, partly it is because it is more tractable.

  The register declaration is all or nothing, but a good compiler will
  decide to keep something in a register for some particular region
  of code and in memory for another part of the code.

So in practice, most compilers ignore register keywords, and I have not
seen programmers being outraged that their register variables are not
always in registers (they sure would get outraged a lot on the x86 if
they thought this, unless their code was desigfned for a PDP-11 :-)

It is indicative, as someone has pointed out, that the register keyword
was there early on in C compilers, allowing very small naive C compilers
to generate reasonable code without optimization or elaborate register
allocation algorithms.

On the other hand, the inline keyword is much more recent. Pragma Inline
has always been in Ada, and there was absolutely not even a slight
suggestion that it should be removed or deprecated in Ada 95, since in
practice it has proved very useful. It does not guarantee inlining, but
with reasonable Ada compilers that have appeared (including GNAT) it
does indeed provide a very useful tool for Ada programmers. There is the
additional issue in Ada of generating extra dependencies.

An interesting note is that in classical Ada compilers, you can only inline
from units that have already been compiled (analogous to the quite annoying
restriction of only inlining bodies that you have already seen). This means
that two mutually recursive packages cannot inline in both directions
(worse, the code you get depends on the order of compilation). In GNAT,
using the source based approach (for which we have rms to thank, see below)
we can fully respect inlining even in this mutually recursive case and the
code never depends on the order of compilation.

Robert

(post note). The source based approach in Ada comes from a discussion around
1991 with RMS. He was outraged at the idea that the meaning of a program
depended on the order of compilation. We patiently explained (thinking from
the point of view of a traditional library based Ada compiler, which the
Ada standard seems to expect) that this was required in Ada. Well RMS was
not the kind of person to be convinced that a point is wrong when the only
counter argument is to wave a standard around :-) He felt that not only
was it pragmatically undesirable that the meaning of a program depends on
the order of compilation, but also that it was fundamentally philosphically
unacceptable, since the result is that the sources of a program do not
embody its meaning without the additional non-source information of what
order to compile in. After a long to-and-fro discussion (which should
have been preserved but unfortunately was not) we devised the sources based
compilation approach and realized that it was as-if conformant to the Ada 83
standard (the Ada 95 standard has been rewritten to make this approach more
clearly conformant, and other Ada compilers have "borrowed" this source
based approach from GNAT :-)

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 18:49 Robert Dewar
  2003-03-15 18:52 ` Daniel Jacobowitz
  2003-03-15 18:58 ` Richard Earnshaw
  0 siblings, 2 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 18:49 UTC (permalink / raw)
  To: Richard.Earnshaw, bernds; +Cc: aph, gcc

> always_inline is just extra clutter, either in the sources or in the Makefile.

I disagree. I think that always_inline should be used *only* if there is a 
functional requirement (not just an efficiency requirement) for inlining. And
such situations are unusual, and to me require a specific comment anyway, so
if you have a specific comment, it may as well be attached to the
attribute specification.

> This breaks existing programs; not in the sense of
> causing them to fail to compile or work, but by causing severe performance
> regressions.

But if there are "severe performance regressions" caused by the compiler not
recognizing inline when it should, that's a serious problem that should be
addressed, not by a kludge requiring programmer messing, but by fixing the
compiler. For addressing that, it would seem to me that examples woul dbe
most useful.

One interesting point here is that in the case of Ada, we find that the
compiler makes quite reasonable decisions for pragma Inline, it does not
*always* inline every instance of pragma Inline, which is why we have
Always_Inline, and in particular, we require a switch to activate inlining,
and Always_Inline inlines even in the absence of this switch. But the
heuristics used for inlining seem to work pretty well. Indeed the only
trouble we have had with inlining is people using -O3 and degrading
performance, since -O3 typically does too much inlining, especially in
a program where the programmer has already decided what should be inlined.

> It's the change in behaviour from previous versions that bothers me

That's certainly a legitimate concern. I think the most useful thing would
be real examples where there is a significant change in performance, since
the objective should be to improve the handling of inline by default.

> this is the reason why I would like something like -fobey-inline as default.

That seems undesirable to me, there may be legitimate reasons for refusing
to inline a function (e.g. performance reasons, if you have a huge function
with many calls, then the code explosion is very likely to degrade
performance by degrading icache performance).
y
 

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-15 13:47 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-15 13:47 UTC (permalink / raw)
  To: gcc, linux

> No, if the function is marked inline incorrectly the programmer should 
> discover it and remove the it himself. C is not a language there the 
> semantics mean: "I have no idea what I am doing, so please to whatever you 
> want with what I write".

I strongly disagree with this. In normal usage, inline simply means "I really
want calls to this to be as fast as possible, and if necessary sacrifice space
for speed". If a compiler knows that it is not significantly helpful, or possibly
that it is even unhelpful to inline, then it is silly to inline. Furthermore, this
does not correspond to a mistake in the C program, since it may be target dependent
whether inlining is significantly helpful (on machines with very small icaches,
inlining big functions very often results in slower performance).

I do think it is useful to have a switch which causes warnings to be generated
in cases where the compiler could not, or would not do the inlining, most helpfully
with an indication of why not.

Yes, as we all agree, there are cases where inline is NOT about speed but
but about functionality, and in such cases, the inlines should be specially
marked.

As for the quote about C, I think it's a bit off target. These days with modern
processors, C like any other high level language is very much a language where
the semantics mean "I have no idea what machine language should be generated
for this, I expect you to figure out the fastest/smallest appropriate machine
language." Yes, this is a change from the old PDP-11 days :-)

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14 19:37 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-14 19:37 UTC (permalink / raw)
  To: austern, dewar; +Cc: Richard.Earnshaw, aph, echristo, galibert, gcc

> Sometimes.  But this isn't really an argument we need to have, since 
> the two of us agree that (a) gcc as it stands now shouldn't ignore the 
> 'inline' keyword, and (b) there should be some kind of mechanism for 
> programmers to force inlining in the unusual circumstances where they 
> need that kind of low-level control.

I agree!

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14 18:40 Robert Dewar
  2003-03-14 18:55 ` Matt Austern
  2003-03-14 20:31 ` Andreas Schwab
  0 siblings, 2 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-14 18:40 UTC (permalink / raw)
  To: austern, galibert; +Cc: Richard.Earnshaw, aph, dewar, echristo, gcc

> That's not true.  Most compilers that I know of use heuristics to decide
> whether or not to do inlining, and will ignore a request to inline an
> excessively large function.  Some compilers ignore the inline keyword
> altogether, and use information gained from interprocedural analysis
> do decide whether to do inlining.   (Note: I'm not suggesting that gcc
> go down that route, at least not yet.  That sort of thing only makes
> sense for a state of the art optimizing compiler, which gcc isn't.)

It's dubious even for a "state of the art optimizing compiler" The programmer
often knows better than any compiler what should be inlined.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14 18:25 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-14 18:25 UTC (permalink / raw)
  To: gcc, kth

> >For example, in the Ada standard, if you write
> >
> >   a := x / y;
> >
> >where y is 1.0, and Machine_Overflows is false for the floating-point type in
> >question, then the result is "unspecified". This means that the compiler could
> >generate code to send denial-of-service-attacks to the internet root servers,
> >and you would not be violating the standard, but you would not get many
> >customers for your compiler. What users would expect here on an IEEE machine
> >is to get infinities, even though the Ada RM says nothing about this possibility.
> >
> >  
> >
> I am not an Ada programmer, but if this is division like I think it
> is, I don't understand why you would expect machine overflow by
> dividing by one. Or is this a typo where you meant "where y is 0.0"?

Some typos are really confusing. Sorry about that, yes, indeed I meant 0.0

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14 17:37 Robert Dewar
  2003-03-15 14:22 ` Richard Earnshaw
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-14 17:37 UTC (permalink / raw)
  To: echristo, galibert; +Cc: Richard.Earnshaw, aph, dewar, gcc

> Remember, inline was _added_ to the standard because it was considered
> useful by the users.  It's not legacy like register, it's a recent
> addition, not even 4 years old.  Unfortunately, because of the as-is
> rule, the standard can't actually express what it's supposed to mean.

The trouble is that inlining can mean two quite different things:

1. Efficiency is important for calling this function. if it will speed things up,
then please generate inline code. But only do this if it really will speed things
up. I certainly don't want you to slow things down to meet this request.

2. I have some reason you don't know about for inlining, and at the level of actual
semantic effects of my program, I absolutely need inlining, even if it slows things
down.

The Inline in the Ada and C standards seems more in category 1 to me, that's certainly
true for Ada, which is why we added pragma Inline_Always for the second case. I think
the situation in the C standard is similar, and a mechanism for enforcing inlining
seems reasonable, although I think the argument for doing it with a local attribute
seems stronger than having a compiler switch.

The compiler switch seems to be in more in category 1 than 2 above, and if needed
seems to reflect that the compiler is not doing a good job of obeying the intent
of the inline keyword. Seems better to fix this directly than add a switch to me.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14 17:32 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-14 17:32 UTC (permalink / raw)
  To: Richard.Earnshaw, lars.segerlund; +Cc: aph, dalej, dewar, echristo, gcc

Just to be clear, I absolutely agree that it is useful to have mandator inlining,
and I already gave a completely different reason from the (perfecgtly reasonable)
ones that have been suggested by others (I gave the certification case).

The setjmp/longjmp case is indeed a nice example. I am quite sure that this
example must be undefined in terms of the standard, and the standard is not
just saying "this is undefined, because it is undefined whether inlining occurs".
The reason is more fundamental. The idea of inlining being somehow semantically
equivalent to having the source code actually inlined is conceptually and pragmatically
reasonable, but is way out of scope of the semantic definition in the standard.

So you really can't figure out what this longjmp/setjmp case means from the standard
whether or not inlining actually takes place.

However, in terms of a particular implementation, which enforces inlining, you can
definitely write (undefined, buggy, improper, non-conforming, use whatever adjectives
you feel like) code that does in fact "work" as intended. Yes, of course the code
is not necessarily portable to other compilers etc, but in certain contexts it seems
quite fine to me to use such code if it is well documented, and it is fine to provide
compiler options etc within reason that support such usage.

As an example of this, we do several "nasty non-standard" things in the GNAt library
that we happen to know will work with GNAT, since the run-time library of GNAT is
only ever intended to be compiled with GNAT. Nothing wrong with this (it has 
occasionally inconvenienced users and vendors of other proprietary compilers who
would like to use the GNAT run-time with their compilers, but satisfying that
need is not one of our requirements :-)

Language lawyers who know the standard can tell you that a given program does or does
not have a fully defined behavior according to the standard, but they have no business
telling you that it is always improper to write programs which are not fully defined
in these terms, and compiler writers who think that this viewpoint is legitimate
will meet the letter of the standard, but will fail to provide a maximally usable
compiler.

Note that there is no general principle here. It is neither always right nor always
wrong to use stuff that is outside the standard. Casual use of non-standard features
that derives from ignorance rather than real need should definitely be discouraged
and certainly need not be pandered to. Each case is a judgment call as to whether
the non-standard usage is legitimate enough to be semi-standardized in a particular
compiler.

It seems clear to me that mandatory inlining is something that meets this test, and
should be supported.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14 17:29 Robert Dewar
  2003-03-14 17:29 ` Richard Earnshaw
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-14 17:29 UTC (permalink / raw)
  To: Richard.Earnshaw, dewar; +Cc: aph, dalej, echristo, gcc

> Of course it's not defined behaviour in C99, since it's unspecified 
> whether inlining will take place for any given function -- and hence 
> anything that depends on inlining occuring is then by definition 
> incorrect.  As soon as you make inlining mandatory, these questions start 
> to rear their heads.

Are you sure this is the right exegesis? I would have thought that this was improper
on entirely different grounds (e.g. that if you remove the inline completely it is
still improper).

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14  5:04 Robert Dewar
  2003-03-14 11:24 ` Richard Earnshaw
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-14  5:04 UTC (permalink / raw)
  To: dalej, dewar; +Cc: Richard.Earnshaw, aph, echristo, gcc

> Ah, but if the inline is performed it's not an expired scope any more.  
> One of
> the early C++ suites did exactly this, expecting the inline to be 
> performed.

No, that's not correct thinking, the expired scope is a semantic concept. The
fact that the undefined effect may be different if inlining takes place or not
means nothing (or at least I would guess this). I can't imagine that somethingt
like this suddently becomes defined if inlining takes place, the C standard
can't be that vague ... but surely someone who knows the standard really well
will read us the chapter and verse :-)

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14  3:08 Robert Dewar
  2003-03-14  3:17 ` Dale Johannesen
  2003-03-14  4:05 ` Ziemowit Laski
  0 siblings, 2 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-14  3:08 UTC (permalink / raw)
  To: dalej, dewar; +Cc: Richard.Earnshaw, aph, echristo, gcc

> #include <setjmp.h>
> static jmp_buf buf;
> inline void x() { setjmp(buf); }
> main() { x(); longjmp(buf); }
> 

I don't know the C standard well enough in my head to be sure, but I would be
*amazed* if this is a semantically valid C program. It can't be right to "wake up"
an expired scope with a longjmp, can it? Of course one can be surprised when it
comes to C :-)

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14  3:00 Robert Dewar
  0 siblings, 0 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-14  3:00 UTC (permalink / raw)
  To: echristo, kenner; +Cc: gcc

> There we're making an explicit tradeoff: using aliasing information allows
> much better code generation but indeed will break certain types of
> badly-written code.  But we warn the user of this possibility and support
> a -fno-strict-aliasing if this is a concern of the user.  But the point is
> that the breakage is not gratuitous: there's a good reason for it.

Indeed, and the argument here is more about what the default should be, rather than
whether -fno-strict-aliasing should be supported (I have not seen anyone argue that
supporting this switch threatens the sanity of gcc developers). Actually we have
found that certain unusual constructions in Ada (in particular forcing scalar
parameters to be passed by reference, which is outside normal Ada semantics, but
possible in GNAT using non-standard pragmas) cause unexpected results which can
be "cured" by -fno-strict-aliasing.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14  2:58 Robert Dewar
  2003-03-14  3:05 ` Dale Johannesen
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-14  2:58 UTC (permalink / raw)
  To: dewar, echristo; +Cc: Richard.Earnshaw, aph, gcc

>  It's a road that no
> sane developer would want to go down. Why don't you spend the effort to
> get the standard amended if a particular case is important?

Because the standard cannot cover everything. For example, there is no way that
the formal standard can legitimately talk about inlining *requiring* inlining,
because semantically it should be neutral whether inlining takes place, and we
are always talking about an as-if semantic model in a standard. Standards always
get into trouble when they start saying things that are semantic rubbish (my
perspective here is from the point of view of working on language standards
since the early 70's [when I worked on the Algol-68 defining documents].)

Let's take something as simple as defining the semantics of malloc and free. Well
you know that an implementation that completely ignores free is completely
unacceptable, but it is extremely hard to define *whY* that is unacceptable in
a standard. We deliberately leave many things unsaid since they are simply out
of scope. This does not mean they are unimportant, just that they operate at
a different level of abstraction from the standard.

As for sane developers going down this path, I have been in the commercial compiler
field for some 30 years now, and for every compiler I have worked on, there was a
difficult-to-deal with area of things that people expect to work but which are not
mandated by the standard. Yes, they are tough to deal with, but as far as I can tell
they have not driven me insane :-)

> How about C aliasing issues? Those are carefully outlined in the
> standard, and yet we've had perhaps thousands of emails on that subject.

I would say that any C compiler which does not provide a way of bypassing the
aliasing rules (i.e. stopping the optimizer from taking advantage of them, needs
some careful definition), is a poor implementation of C from a pragmatic point
of view. There is far too much legacy "junk" code that in practice cannot be
modified to behave. Obviously GCC itself agrees with this point of view :-)

In the case of Realia COBOL we faced an even more difficult problem which is that
there were bugs in the IBM Mainframe COBOL implementation which 

a) were definitely inconsistent with the standard
b) which were depended on by a lot of legacy code.

We found that it was in practice more essential to provide IBM compatibility than
it was to provide standard compatibility (we did as I remember provide an option
for the behavior there). It was a marginal case, but even marginal things often
show up in the real world of very large legacy programs.

A standard is simply a tool for helping to ensure commonality between what all
compilers implement and what all users expect of these compilers, but it is 
over-simplistic to think that it can do 100% of the job.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14  2:54 Richard Kenner
  0 siblings, 0 replies; 116+ messages in thread
From: Richard Kenner @ 2003-03-14  2:54 UTC (permalink / raw)
  To: echristo; +Cc: gcc

    How about C aliasing issues? Those are carefully outlined in the
    standard, and yet we've had perhaps thousands of emails on that
    subject.

There we're making an explicit tradeoff: using aliasing information allows
much better code generation but indeed will break certain types of
badly-written code.  But we warn the user of this possibility and support
a -fno-strict-aliasing if this is a concern of the user.  But the point is
that the breakage is not gratuitous: there's a good reason for it.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-14  1:23 Robert Dewar
  2003-03-14  2:15 ` Eric Christopher
  2003-03-14 17:36 ` Kevin Handy
  0 siblings, 2 replies; 116+ messages in thread
From: Robert Dewar @ 2003-03-14  1:23 UTC (permalink / raw)
  To: dewar, echristo; +Cc: Richard.Earnshaw, aph, gcc

> This is ridiculous, and absolutely unsupportable. There's no way that we
> can promise the behavior that every user that decides not to program to
> the various language standards will get the behavior that they expect -
> not unless you have a patch to enable the compiler to read the user's
> mind.

If this seems ridiculous and absolutely unsupportable, then I can only say you
must not have spent much time in the real world of supplying real compilers to
real application developers. If you take an adamant "follow-the-standard-or-else"
point of view, you won't get sued, but you will cut down your customer base.

Finding the right balance between completely ignoring requirements outside the
standard, and trying to meet every users request for specific undefined behavior
is not at all easy, but it is part of the job in real world compiler writing.

For example, in the Ada standard, if you write

   a := x / y;

where y is 1.0, and Machine_Overflows is false for the floating-point type in
question, then the result is "unspecified". This means that the compiler could
generate code to send denial-of-service-attacks to the internet root servers,
and you would not be violating the standard, but you would not get many
customers for your compiler. What users would expect here on an IEEE machine
is to get infinities, even though the Ada RM says nothing about this possibility.

I am not at ALL saying that everytime some C programmer writes carelessly 
non-compliant code (e.g. assuming that an int is the same length as a pointer)
should be accomodated with switches or special behavior of the compiler. That
would indeed be "ridiculous and absolutely unsupportable".

But it is also "ridiculous and absolutely unsupportable" to maintain that a compiler
has no responsibilities at all for generating reasonable code in some situations
that are outside the scope of the standard.

This is really similar to performance requirements. It is perfectly standard
compliant to do muptlication using a recursive routine that does it by adding
and subtracting one. But It is not a reasonable approach, even though it is
conforming. Standards tell part of the story of how you must implement a c
compiler, they do not tell the entire story.

^ permalink raw reply	[flat|nested] 116+ messages in thread
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-13 23:34 Robert Dewar
  2003-03-14  1:11 ` Eric Christopher
  0 siblings, 1 reply; 116+ messages in thread
From: Robert Dewar @ 2003-03-13 23:34 UTC (permalink / raw)
  To: Richard.Earnshaw, aph; +Cc: gcc

> No, it's a compile my buggy program issue.

That's too harsh, a program that does not follow the letter of the standard may
still be perfectly valid for a given implementation, just not portable, but the
programmer may not care about portable, and may care very much whether or not a
given implementation behaves or does not behave in a particular manner.

Yes, implementors can stand on their pedastals and read the standard, and are 
entitled to do so. But potential users are also entititled to take their marbles
and go elsewhere. You have to strike a balance.

Example: Fortran-66 was carefully designed to allow the use of an Algol-60 style
stack for local variables (in particular, if you set a local variable on exit
from a procedure (e.g. a boolean First_Time_In variable) you cannot according to
the standard expect it to be set that way on the next call.

BUT, in practice all Fortran compilers used static allocation, so much so that this
was considered the "right" way of doing things. Burroughs was certainly technically
correct vis-a-vis the standard when they used a stack implementation, but virtually
all Fortran (I should write FORTRAN for 66 :-) users found their compiler useless.

There are many reasons why people would want to force the compiler to obey inlining,
and yes, they are outside the standard, but that does not necessarily make them
illegitimate. For example in GNAT we respect pragma Inline_Always (a pragma we
added for GNAT, it's not in the standard), because it is useful in various
circumstances (e.g. for avoiding this use of a runtime library in a certified
environment).

Robert Dewar

^ permalink raw reply	[flat|nested] 116+ messages in thread
[parent not found: <200303131400.h2DE0ZB24570@pc960.cambridge.arm.com.suse.lists.egcs>]
* Re: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-13 21:36 Richard Guenther
  0 siblings, 0 replies; 116+ messages in thread
From: Richard Guenther @ 2003-03-13 21:36 UTC (permalink / raw)
  To: Andrew Haley; +Cc: Neil Booth, Lars Segerlund, gcc

Andrew writes:
> Neil Booth writes:
> > Lars Segerlund wrote:-
> >
> > >  Are there any arguments against this other than ideological ? (
this
> > > flag doesn't interfere with gcc's normal operation and only when
it's
> > > needed is it in effect, how can that be so bad ? ).
> >
> > That's not a good argument for yet-another-switch-in-gcc.
>
> Yeah.  I gotta admit that
>
> #define inline          __inline__ __attribute__((always_inline))
>
>solves the problem so completely that an new gcc option is unnecessary.
>It can even be written "gcc -D inline=__inline__
>__attribute__((always_inline))"
>Andrew.

This does _not_ work for C++ - try it! You'll get the first compile errors
inside libstdc++. Make it work for C++ and I'll be happy.

Richard.

--
Richard Guenther <richard.guenther@uni-tuebingen.de>
WWW: http://www.tat.physik.uni-tuebingen.de/~rguenth/

^ permalink raw reply	[flat|nested] 116+ messages in thread
* RE: -fobey-inline (was Re: gcc and inlining)
@ 2003-03-13 14:18 S. Bosscher
  0 siblings, 0 replies; 116+ messages in thread
From: S. Bosscher @ 2003-03-13 14:18 UTC (permalink / raw)
  To: 'Richard Earnshaw ', 'Olivier Galibert '
  Cc: 'Richard.Earnshaw@arm.com ', 'Richard Guenther ',
	'Mike Stump ', 'Stuart Hastings ',
	'Matt Austern ', 'Ron Price ',
	'Mark Mitchell ', 'gcc@gcc.gnu.org '

> > On Thu, Mar 13, 2003 at 09:54:05AM +0000, Richard Earnshaw wrote:
> > > I still think this is a bad idea.  Please start thinking about
> > > how to produce a better nut cracker rather than a larger sledge 
> > > hammer.
> > 
> > -fobey-inline is more of a correctness issue than a performance
> > issue for the people who need it.
> 
> No, it's a compile my buggy program issue.
> 
> There is no guarantee in the standard that an "inline" function will be 
> inlined.

You've said that many times now, and you're right.

Many GCC users have said that if they say "inline" they really mean "inline"
(e.g. linux kernel hackers).  And they don't want the compiler to say,
"well, not while I'm around!".

This compiler flag allows the user to make the decision, I don't see what's
wrong with that.

Of course the nut cracker should be fixed, but the sledge hammer will help
those users for now.

Greetz
Steven

^ permalink raw reply	[flat|nested] 116+ messages in thread
[parent not found: <BFE7BDE2-50EF-11D7-966A-003065ED8B66@apple.com>]

end of thread, other threads:[~2003-03-18 23:07 UTC | newest]

Thread overview: 116+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-17 20:14 -fobey-inline (was Re: gcc and inlining) Robert Dewar
  -- strict thread matches above, loose matches on Subject: below --
2003-03-18 15:03 Robert Dewar
2003-03-18  5:50 Robert Dewar
2003-03-18  5:50 ` Gabriel Dos Reis
2003-03-18  3:28 Robert Dewar
2003-03-18  4:18 ` Gabriel Dos Reis
2003-03-17 20:11 Robert Dewar
2003-03-17 17:10 Robert Dewar
     [not found] <1047828505.4119.ezmlm@gcc.gnu.org>
2003-03-17 10:14 ` Tim Josling
2003-03-17  6:46 Robert Dewar
2003-03-17 19:19 ` Matt Austern
2003-03-16 16:14 Robert Dewar
2003-03-16 18:37 ` Bernd Schmidt
2003-03-15 23:04 Robert Dewar
2003-03-15 22:37 Robert Dewar
2003-03-15 21:41 Robert Dewar
2003-03-16 15:38 ` Bernd Schmidt
2003-03-15 21:19 Robert Dewar
2003-03-15 19:51 Robert Dewar
2003-03-15 19:44 Robert Dewar
2003-03-15 19:32 Robert Dewar
2003-03-15 21:36 ` Bernd Schmidt
2003-03-16  4:04   ` Geoff Keating
2003-03-17 17:59   ` Matt Austern
2003-03-17 17:47 ` Joe Buck
2003-03-15 19:30 Robert Dewar
2003-03-15 20:52 ` Andreas Schwab
2003-03-15 21:39 ` Bernd Schmidt
2003-03-15 18:49 Robert Dewar
2003-03-15 18:52 ` Daniel Jacobowitz
2003-03-15 18:58 ` Richard Earnshaw
2003-03-15 13:47 Robert Dewar
2003-03-14 19:37 Robert Dewar
2003-03-14 18:40 Robert Dewar
2003-03-14 18:55 ` Matt Austern
2003-03-14 20:31 ` Andreas Schwab
2003-03-14 23:11   ` Joe Buck
2003-03-15  0:50     ` Geoff Keating
2003-03-15 13:09       ` Allan Sandfeld
2003-03-15 18:24       ` Bernd Schmidt
2003-03-16 19:04         ` Alexandre Oliva
2003-03-16 19:31           ` Gabriel Dos Reis
2003-03-17 17:48           ` Joe Buck
2003-03-17 19:46             ` Ross Smith
2003-03-17 19:50               ` Joe Buck
2003-03-18  7:57                 ` Ross Smith
2003-03-18  8:48                   ` Gabriel Dos Reis
2003-03-18 18:39                     ` Ross Smith
2003-03-18 19:39                       ` Matt Austern
2003-03-18 23:59                       ` Fergus Henderson
2003-03-17 20:31               ` Gabriel Dos Reis
2003-03-17 20:29             ` Gabriel Dos Reis
2003-03-17 20:46               ` Joe Buck
2003-03-18 12:26             ` Richard Earnshaw
2003-03-18 19:56               ` Joseph S. Myers
2003-03-14 18:25 Robert Dewar
2003-03-14 17:37 Robert Dewar
2003-03-15 14:22 ` Richard Earnshaw
2003-03-14 17:32 Robert Dewar
2003-03-14 17:29 Robert Dewar
2003-03-14 17:29 ` Richard Earnshaw
2003-03-17  3:02   ` Segher Boessenkool
2003-03-14  5:04 Robert Dewar
2003-03-14 11:24 ` Richard Earnshaw
2003-03-14 11:41   ` Lars Segerlund
2003-03-14  3:08 Robert Dewar
2003-03-14  3:17 ` Dale Johannesen
2003-03-14  4:05 ` Ziemowit Laski
2003-03-14  3:00 Robert Dewar
2003-03-14  2:58 Robert Dewar
2003-03-14  3:05 ` Dale Johannesen
2003-03-14 18:08   ` Andrea 'fwyzard' Bocci
2003-03-14 18:53     ` Fergus Henderson
2003-03-16 18:56   ` Alexandre Oliva
2003-03-17  4:38   ` Segher Boessenkool
2003-03-14  2:54 Richard Kenner
2003-03-14  1:23 Robert Dewar
2003-03-14  2:15 ` Eric Christopher
2003-03-14 17:36 ` Kevin Handy
2003-03-13 23:34 Robert Dewar
2003-03-14  1:11 ` Eric Christopher
2003-03-14 11:53   ` Olivier Galibert
2003-03-14 18:08     ` Matt Austern
2003-03-15 18:08       ` Bernd Schmidt
2003-03-17  0:32         ` Richard Almquist
2003-03-17  5:55           ` Steven Bosscher
2003-03-17 12:30             ` Andreas Schwab
2003-03-17 14:34               ` Steven Bosscher
2003-03-17 14:55                 ` Andreas Schwab
2003-03-18 12:19                   ` Steven Bosscher
2003-03-17  1:09     ` Segher Boessenkool
     [not found] <200303131400.h2DE0ZB24570@pc960.cambridge.arm.com.suse.lists.egcs>
     [not found] ` <3E709381.5090500@comsys.se.suse.lists.egcs>
     [not found]   ` <20030313192518.GF21522@daikokuya.co.uk.suse.lists.egcs>
     [not found]     ` <15984.56422.24671.261942@cuddles.cambridge.redhat.com.suse.lists.egcs>
2003-03-13 21:59       ` Andi Kleen
2003-03-13 21:36 Richard Guenther
2003-03-13 14:18 S. Bosscher
     [not found] <BFE7BDE2-50EF-11D7-966A-003065ED8B66@apple.com>
2003-03-12 21:41 ` Richard Guenther
2003-03-13  4:01   ` Mike Stump
2003-03-13  9:29     ` Richard Guenther
2003-03-13 10:14       ` Richard Earnshaw
2003-03-13 10:40         ` Richard Guenther
2003-03-13 13:21         ` Olivier Galibert
2003-03-13 14:00           ` Richard Earnshaw
2003-03-13 14:00             ` Andrew Haley
2003-03-13 14:19               ` Richard Earnshaw
2003-03-13 15:03                 ` Lars Segerlund
2003-03-13 17:04                   ` Daniel Jacobowitz
2003-03-13 19:43                   ` Neil Booth
2003-03-13 20:19                     ` Andrew Haley
2003-03-14 12:11                   ` Gabriel Dos Reis
2003-03-14 12:14                     ` Lars Segerlund
2003-03-16 19:02                     ` Alexandre Oliva
2003-03-15 17:05                 ` Bernd Schmidt
2003-03-15 17:14                   ` Gabriel Dos Reis
2003-03-15 17:51                     ` Bernd Schmidt
2003-03-17 19:25                     ` Mike Stump
2003-03-13  9:51     ` Richard Guenther
2003-03-13 10:48     ` Richard Guenther

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).