public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-18 13:09 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-18 13:09 UTC (permalink / raw)
  To: coyote; +Cc: gcc

    Documentating isn't as fun as coding.

Which is one of the reasons why good software engineering practice says to
write documentation *before* the code.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-20 12:36 Richard Kenner
  2004-01-20 15:06 ` Daniel Jacobowitz
                   ` (2 more replies)
  0 siblings, 3 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-20 12:36 UTC (permalink / raw)
  To: s.bosscher; +Cc: gcc

    It's not a replacement for real documentation (that we're also working
    on) but it makes the code much easier to understand.  And you don't
    have to grep so much, if you see a functions you don't know yet, just
    follow a link and see what it does.

I would *much* prefer to see all documentation in the sources.  The code needs
to be self-contained and not to web pages someplace.  If you print out
a set of files to read on an airplane, for example, you want to have all
the necessary documentation in those files.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-20 11:46 Richard Kenner
  2004-01-20 11:57 ` Steven Bosscher
  0 siblings, 1 reply; 192+ messages in thread
From: Richard Kenner @ 2004-01-20 11:46 UTC (permalink / raw)
  To: pinskia; +Cc: gcc

    But the comments from the beginning of each function is the
    *specification* of the function and not the *implementation*, this is
    where the documentation comes from.

That's correct, so I think we're talking about two different things.
The issue that was being raised was documentation *in the source* and
it sounded like you were saying that the documentation specification
of the function was derived from that of the implementation.

So what *is* the documentation that's derived from this?

    If this is not true in your Ada sources, then you are not following
    the coding style and every patch should be rejected here forth until
    you or another Ada person fixes this.

In Ada, the specification and implementation of a function are in two
different files (or two different places in the same file for local functions)
and the documentation for each is located at the corresponding location.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-20  4:35 Robert Dewar
  0 siblings, 0 replies; 192+ messages in thread
From: Robert Dewar @ 2004-01-20  4:35 UTC (permalink / raw)
  To: kenner, pinskia; +Cc: dnovillo, gcc

> If this is not true in your Ada sources, then you are not following the 
> coding
> style and every patch should be rejected here forth until you or 
> another Ada
> person fixes this.

Actually it would be quite wrong in Ada to put the specification of the
function at the start of the code for the function, it belongs in the
package spec, not in the package body. Ada is not C!

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-20  4:23 Richard Kenner
  2004-01-20  4:28 ` Andrew Pinski
  2004-01-20 11:15 ` Diego Novillo
  0 siblings, 2 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-20  4:23 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    The API documentation is published nightly, created directly from the
    source code comments.  

I don't follow.  The source code comments within a function describe the
*implementation* of a function: the API documentation needs to describe
the *specification* of a function.  These are two different things.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 23:40 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 23:40 UTC (permalink / raw)
  To: tm_gccmail; +Cc: gcc

    I'm not aware of any code in GCC to "figure out the GIV offset from all
    the computations in RTL"?


loop.c:check_insn_for_givs

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 23:15 Richard Kenner
  2004-01-19 23:31 ` tm_gccmail
  0 siblings, 1 reply; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 23:15 UTC (permalink / raw)
  To: pinskia; +Cc: gcc

    But any alias/loop optimization cannot really be done on targets like
    IA64 with almost no offset.  The IA64 has only room for a zero offset,
    every thing is done in index form.

That doesn't matter.  You'd figure out the GIV offset from all the
computations in RTL.  We do that now.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 19:13 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 19:13 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    Well, I know nothing about Ada so I'm not sure what you mean by that
    remark.  That's why I was asking for specific examples.  Annotated, if
    possible.

OK.  Here's a test program:

procedure Tparray (X: Integer) is
   type Barr is array (Integer range <>) of Boolean;
   pragma Pack (Barr);		-- So we have a packed array of 1 bit
   Y: constant Integer := 31;	-- Here's a variable whose value we know.

   subtype Barr1 is Barr(1..X); -- This type has variable size.
   subtype Barr2 is Barr(1..Y); -- ... and this one has a fixed size (31 bits).

   --  Now we have two identical functions, one on each type.

   function F1 (A, B : Barr1) return Barr1 is
      Arr: Barr1 := A;
   begin
      Arr (2) := False;
      return Arr xor B;
   end F1;

   function F2 (A, B : Barr2) return Barr2 is
      Arr: Barr2 := A;
   begin
      Arr (2) := False;
      return Arr xor B;
   end F2;
begin
   null;
end Tparray;

Now here's the Ada expanded code for this.  Note the very different forms
of tparray__f1 and tparray__f2:

Source recreated from tree for Tparray (body)
---------------------------------------------

with system.system__unsigned_types;
with system.system__bit_ops;
with system;
with system.system__secondary_stack;

procedure tparray (x : integer) is
   type tparray__barr is array (-16#8000_0000# .. 16#7FFF_FFFF#
     range <>) of boolean;
   pragma pack (tparray__barr);
   y : constant integer := 31;
   subtype tparray__barr1 is tparray__barr (1 .. x);
   subtype tparray__barr2 is tparray__barr (1 .. 31);
   freeze tparray__barr []
   freeze tparray__barr1 []
   freeze tparray__barr2 []
   
   function tparray__f1 (a : tparray__barr1; b : tparray__barr1)
     return tparray__barr1 is
      arr : tparray__barr1 := a;
   begin
      arr (0) := system__unsigned_types__packed_byte!(arr (0) and 16#FD#);
      null;
      T3b : tparray__barr1;
      system__bit_ops__bit_xor (arr'address, tparray__Tbarr1P1'
        range_length, b'address, tparray__Tbarr1P1'range_length, T3b'
        address);
      return T3b;
   end tparray__f1;
   
   function tparray__f2 (a : tparray__barr2; b : tparray__barr2)
     return tparray__barr2 is
      arr : tparray__barr2 := a;
   begin
      arr := tparray__barr2___XP1!(arr and 16#FFFF_FFFD#);
      null;
      return tparray__barr2!(arr xor b);
   end tparray__f2;
begin
   null;
   return;
end tparray;

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 18:06 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 18:06 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    Instead of emitting runtime calls, would it be possible to emit tree
    codes with well defined semantics?  On finding them, the optimizers
    would know that it's not just an arbitrary function call for instance
    (perhaps adding attributes to the libcall).
    
    But I'm oversimplifying.  We would have to talk about specific cases.

You are oversimplifying.  There is a *huge* amount of code generated
that has subtle dependencies on these things.

Just as one example, the representation and generated code for packed
array of Boolean is completely different if the array bounds are constant
and small (say 1..32) vs. if they are variable.

There's no practical way to represent all the different possibilities
and expect language-independent code to choose one based on constant
propagation: it has to be done in the front end or not at all.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 16:12 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 16:12 UTC (permalink / raw)
  To: law; +Cc: gcc

    But I wouldn't suggest tracking dataflow in the front-end solely for
    the case of optimization purpose, particularly for things like bounds
    checking since we really need to be doing that in language independent
    ways given that every language can and should be making use of those
    optimizers.

We mostly agree, but I maintain that there will always be some
language-dependent optimizations that need to be done in the front end that
will use such information.

For example, there are numerous cases in Ada where the presence of a certain
construct within a block means the block has to be "wrapped" in some way.
Whether that happens may depend on whether some bounds are variable or
constant or whether or not the construct in question is in dead code or not.

It can be very hard to express to language-independent parts of the compiler
what to "undo" and under what conditions (the variable vs. constant bound
information for some types of data structures are a good example here).

Adding relatively simple constant-propagation code to the front end caught a
lot of these cases and was therefore a worthwhile thing to do, despite
possible duplication with later passes.  Simple static value range
determination code is another example as is simple dead-code elimination.

Then there's the point that Robert made: you often want to give warnings for
dead code or unused variables and the more language-specific those warning
are, the more use they'll be to the programmer.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 15:05 Richard Kenner
  2004-01-19 15:56 ` law
  2004-01-19 22:41 ` Andrew Pinski
  0 siblings, 2 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 15:05 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    > The Ada tree has *a lot* more information than can be (or should be)
    > encoded into the GCC tree datastructure.  Each tree node has 183
    > defined flags, for example.

    When the time comes to generate GENERIC from Ada, then that
    information should be propagated down.  

I disagree.  I see no reason to find ways of representing the sort of
language-specific information that's encoded there.  Sure, some of that is
used for code generation information and is propagated down, but most of it
is not and need not be.  If you're curious about what kinds of information is
in Ada tree nodes, look at ada/einfo.ads and ada/sinfo.ads.  Note that the
Ada tree is a parse tree augmented with semantic information, rather than a
purely semantic tree like GCC.

    One thing that I'm vaguely concerned regarding Ada is the potential of
    having to create new GIMPLE trees.  Having to create new GENERIC codes
    wouldn't be a problem, but adding GIMPLE means changing the optimizers
    as well.

I don't know enough about GIMPLE to answer that and I think it's not
practical to answer that for certain at least until "old-style"
function-at-a-time is working for Ada, but as long as there's handling for
the present PLACEHOLDER_EXPR and WITH_RECORD_EXPR, which seems to me to be
needed at that level (though perhaps it might not be), I doubt there should
be any significant issue here.

    I only meant checks that need dataflow information.  If the
    elimination needs dataflow information, then the FE will be
    duplicating code and effort.

Not necessarily.  If the front end is already tracking some dataflow for its
own purposes and can use that knowlege to eliminate a check, why would it be
better for it *not* to do so?  As I said, all over GCC we're doing
"duplicate" simplifications and the fact that we do so is one of the major
strengths of the compiler.

    There has been some discussion of perhaps lowering ARRAY_REFs.  But
    that would be done relatively late in the tree pipeline.

Good, because that's my concern: the form of the subscript information is
critical to many high-level loop optimizations.  If you're going to have to
figure that out from an address computation, you're giving up much of the
benefit of doing that optimization on trees instead of RTL>

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 14:17 Richard Kenner
  2004-01-19 14:46 ` Diego Novillo
  2004-01-19 17:58 ` Dan Nicolaescu
  0 siblings, 2 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 14:17 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    Full FE type information is available in GIMPLE.  

The Ada tree has *a lot* more information than can be (or should be)
encoded into the GCC tree datastructure.  Each tree node has 183 defined
flags, for example.

    VRP is one of the passes I'm planning to work on in the immediate
    future.  The goal is to eliminate mudflap checks, though it should
    help Java and Ada as well.

Sure it will.  There will indeed be checks that can't be supressed statically
that can with VRP, but the opposite is also true.

    If the check needs dataflow information to be eliminated, the FE had
    better not deal with it.

I don't follow.  Why "had better not"?  For every check that the FE
can eliminate, there's that much less work for the rest of the
compiler to do.  A check is merely a flag on an operation node in the
Ada tree.  If it can be suppressed at that level, we avoid ever generating
*any* tree nodes for the check.  That seems a good thing to me: why do you
see it as something that "had better not" happen?

    Nothing in tree-ssa is language specific.

I didn't say there was.  What I said was that it looked like the *example*
was relying on language-specific features.  It turned out I misread the
message, but my concern was in the example only.

    I have an idea.  Why don't you provide test cases in the form of
    bugzilla reports? 

Because I don't exactly what the optimizations goals are, nor am I
particularly concerned about the details.

    Even more, we could vote on a set of specific bugzilla PRs as merge or
    post-merge criteria.  

I think that would be unfair to the tree-ssa project.  I don't see the merge
criteria as the GCC project giving some test cases to the tree-ssa folks and
saying "show me that you can improve these cases".  I think that's much too
hard a standard to meet.

Instead, I think the tree-ssa folks should implement several new
optimizers that rely on higher-level information to show the utility of the
new infrastucture and should produce test cases (preferably in C) that
show the success of those optimizers.  I think that's both an easier and
more relevant standard.

    What information?  Type?  Yes, we preserve full user-level type and
    variable information.  Control flow?  We have a flow graph.  Data
    flow?  We have an SSA web.  What specific information are you
    concerned about?

Information regarding the form of array and component accesses.  In a
discussion about RTL loop code, I thought I saw that the addressing computation
would be done early on and the COMPONENT_REFs and ARRAY_REFs would be removed.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 14:02 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 14:02 UTC (permalink / raw)
  To: aph; +Cc: gcc

    On the other hand, if Ada can really do the job of its check
    elimination so much better than a generic optimizer, fair enough.  But
    range check elimination using VRP is a sufficiently generic problem
    that many languages will benefit.

I agree.  I wasn't arguing against VRP or saying that it would not be useful
in eliminating range checks, just that there are language-specific tests that
can more easily be done in the front end that eliminate the need for
sophisticated optimizations like that.

The GCC approach has always been to do as many optimizations as possible at
all levels: we do constant folding at both the tree and RTL level.  This is
done not just to avoid the risk of missing an opportunity, but because the
earlier we do an optimization, the less work the lower level optimizers have
to do and that improves compilation speed.

I see it as the same with checks and VRP: certainly VRP ought to be
implemented and certainly it will eliminate some checks, but that does *not*
mean we shouldn't implement a check-elimination pass in the Ada front end
that uses static semantic information that language-independent code doesn't
have access to.  The reasons are the same as above: not only does it avoid
the risk of missing an opportunity, but it creates less work for subsequent
passes to do.

    And of course there are other things: escape analysis, for example.
    Sure, I could do that in the Java front end, but I'd rather not.

I don't know enough about escape analysis in Java to offer any opinion as to
whether it's appropriate to have such in the front end, but I believe that if
it's easier to do at that level, it should be done there even if other
optimizers could also catch some cases.

A lot of the strategy for Ada was not be concerned about generating a lot of
code and to assume that GCC would optimize all the junk away. This strategy
has worked remarkably well, but does cause worse code in many more cases than
we'd like to see due to some notable failures in language-independent
optimization not being able to optimize some cases.  There's reason to
believe tree-ssa will do a better job, but the best job would be produced by
not generating the junk in the first place.

I believe the reason for GCC's great success in the past has been its
strategy of doing optimizations at all possible levels and I also believe
this will be reason for its success in the future.  So I see tree-ssa as an
another set of optimizers, but not one that will remove the need for having
any optimizations in the front end nor certainly remove the need for RTL
optimizers.  I don't think this is or should be a goal of the tree-ssa project.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 12:29 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 12:29 UTC (permalink / raw)
  To: rth; +Cc: gcc

    Did you not read my message?  The test I gave *was* C.

I read it, but obviously not carefully enough!

I knew the original code in that PR was C++ and then saw your C++ comment
in the last paragraph and missed the point that you'd used the C version
in that PR.

I stand corrected.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 12:24 Richard Kenner
  2004-01-19 12:31 ` Andrew Haley
                   ` (7 more replies)
  0 siblings, 8 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 12:24 UTC (permalink / raw)
  To: hubicka; +Cc: gcc

    Even if tree-SSA didn't made important speedups for common C programs I
    think this is not problem as long as it is not making C worse and do
    make C++ and Java better.

Can similar cases as those shown for C++ be constructed and measured for Java?

    I don't think re-doing optimizations in each frontend is good design
    decision.

I agree that *re-doing* is not a good design decision, but it's quite often
the case that *doing* optimizations in a front-end is the appropriate design
decision.

A case I know about in Ada is check elimination.  Because the default for Ada
is enabling checking, it's quite important to eliminate checks that can be
proven not to fail.  Theoretically, a lot this could be language-independent
optimizers by value range propagation and related optimizations.  But the
front-end can do a much better job because it has information only it knows.
Moreover, by suppressing the check before generating any code for it,
compilation time is reduced.  I think this is clearly the proper place for
that optimization.

That's why I asked about this, if it's truly C++-specific: wouldn't it be
better in the C++ front end?  That's why it's important to understand how
language-independent it is.

    In longer run, with the new loop optimizer or profile driven inlining,
    we will see considerable benefits for C programs too, but I would
    prefer this to not be blocker for tree-SSA acceptance.

I would.

    The optimizations tree-SSA implement right now are just essentials to
    get more work in this area done.

I'm not suggesting not getting any work done: there's active development work
being on it now and I'm all in favor of it being continued.

However, I'm not as willing as some people to simply accept the argument that
this will lead to "considerable benefits" due to what are essentially
theoretical arguments.  I'm a pragmatist: I'd like to *see* those benefits.

I'd like to see examples of some of these optimizations that provide
"significant" (leaving that undefined for the moment) benefits for all
languages before accepting that the tree-ssa structure is as beneficial as
its proponents argue.

One specific concern I have is the issue of when to lower.  I admit I haven't
been following the project closely, so please feel free to correct me if I'm
wrong, but my sense is that lowering of the level of the tree is now being
done very *early*.  That seems to me to be potentially incompatible with the
argument that doing such things as loop optimization at the tree level can
use higher-level information: are we preserving such information?

As I said, perhaps I misunderstand what's going on, but if I don't, I think
the above is the critical issue and the design space of when to lower needs
to be resolved by actually demonstrating some of the hoped-for high-level
optimizations. I would not be comfortable merging tree-ssa until that level
of design issues have been settled.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-19 11:44 Richard Kenner
  2004-01-19 12:00 ` Jan Hubicka
  2004-01-19 12:12 ` Richard Henderson
  0 siblings, 2 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-19 11:44 UTC (permalink / raw)
  To: rth; +Cc: gcc

    So we've missed the required factor of 2 on this test case by 0.8%.
    Since that seems likely to be in the relm of measurement error, I
    think that should qualify.

I agree.

    With a bit more work unwravelling C++ front-end obfuscation, I would
    expect the 10-20% to be visible on just about any object abstraction
    test case.  Particularly for any object that has more than one field,
    and thus can't benefit from rtl addressof.  That seems like it should
    be a large enough class to qualify.

Likewise.

However, it would be good to see cases of both of the above for C as well as
C++: if the gain is just C++, one could argue that the most appropriate place
for such code is in the C++ front end.  (There are Ada-specific optimizations
in the Ada front end, for example.)

The tree-ssa infrastructure is supposed to benefit *all* languages.  If
benefits can be shown in C, they will clearly apply to all languages.  But
that's not true for C++.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17 17:17 Dara Hazeghi
  2004-01-19 17:23 ` law
  0 siblings, 1 reply; 192+ messages in thread
From: Dara Hazeghi @ 2004-01-17 17:17 UTC (permalink / raw)
  To: gcc

Hello,

IMHO, releasing a compiler (3.5?) with full
integration of tree-ssa branch would be a lot more
palatable if we had:

1) A committment by people to fix regressions/bugs as
they appear, as opposed to right at the end of the
release cycle. Until a month ago, there were only
really 3 or 4 people actively fixing regressions on
mainline which is partly the reason branching for 3.4
has been so slow.

2) A general consensus that the mainline won't simply
be abandoned once the changes get merged in. With
new-ra for instance, we now have 2 register
allocators, and it doesn't seem like we can get rid of
either in the forseeable future (wasn't there a plan
to switch fully to new-ra at some point?).

3) I don't see a particularly hurry in merging. 3.4
looks to be the most exciting GCC release in quite a
while (PCH, new C++ parser, unit-at-a-time,
improvements in PGO...), and it would be a pity if
merging diverted resources away from it.

My 2 cents (from the perspective of observer and
occasional user),

Dara

__________________________________
Do you Yahoo!?
Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes
http://hotjobs.sweepstakes.yahoo.com/signingbonus

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17 13:35 Richard Kenner
  2004-01-17 14:05 ` Steven Bosscher
  0 siblings, 1 reply; 192+ messages in thread
From: Richard Kenner @ 2004-01-17 13:35 UTC (permalink / raw)
  To: dje; +Cc: gcc

    If we want to develop a GCC 3.5 release without Tree-SSA, then we
    should have specific, non-SSA feature goals that we want to
    accomplish.  Otherwise, what is the benefit of GCC 3.5 over additional
    point releases of GCC 3.4 stable branch?

I don't understand your point.  Since GCC is a volunteer project, there is
no practical way of forming such "goals" or schedules.  We presume, unless
there's evidence to the contrary that people are going to be working on
improvements to GCC into the future.

If indeed a long period of time goes by without such improvements, it would
indeed be a good question about whether it would make sense to make a new
release before tree-ssa is ready, but I don't see how we can have any data
to make such a determination *now*.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17 13:33 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-17 13:33 UTC (permalink / raw)
  To: law; +Cc: gcc

    Realistically, if we are going to make tree-ssa a complete non-starter
    because the Ada front-end isn't going to work and its maintainers are
    not showing any willingness to put forth the effort to make it work
    with already existing infrastructure, then, well, why bother with
    tree-ssa at all.

I've seen *nobody* from the Ada community advocating that.  Indeed both
Robert and I feel strongly that Ada's being behind should not be a relevant
criteria for tree-ssa inclusion.  So you have a strawman here.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17 13:29 Richard Kenner
  2004-01-17 17:58 ` Diego Novillo
  0 siblings, 1 reply; 192+ messages in thread
From: Richard Kenner @ 2004-01-17 13:29 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    If we are to wait for all the possible optimizations (vectorization,
    memory hierarchy, loop transformations, etc) to be contributed, we may
    have to wait quite a bit longer than if we included the infrastructure
    in mainline.

My threshold wouldn't be "all possible optimizations", but enough of
them to show that the new infrastructure not only is going to meet its
expectations but that it isn't going to need to continue to evolve in
major ways.

To me, merely saying that "this is obviously a better approach since
it's more modern and is what the textbooks show" would be a *disadvantage*
of the approach.  We need to see evidence that this approach really is better.

    By its very nature, mainline attracts quite a bit more development than
    an obscure branch.

I don't think anybody would call tree-ssa an "obscure branch".

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re:  [RFC] Contributing tree-ssa to mainline
@ 2004-01-17 13:20 Richard Kenner
  0 siblings, 0 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-17 13:20 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    Tree SSA has always been very conventional.  If I had wanted to do
    research, I would have started with my Concurrent SSA work.

What I meant is that there were significant details, such as the ordering
of lowering and optimizations (which optimizations should be done at which
level) and issues such as the replacability of the RTL optimizers, that
could not be known at the start of the project and that a large part of
the project is not implementing such decisions but figuring out what they
should be using an experimental approach.

Also, there is usually significant difference between textbooks and real
life so that trying to implement algorithms from a text into a real compiler
can itself be more in the research than straightforward development arena.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17  3:26 Richard Kenner
  2004-01-17 14:49 ` Scott Robert Ladd
  0 siblings, 1 reply; 192+ messages in thread
From: Richard Kenner @ 2004-01-17  3:26 UTC (permalink / raw)
  To: s.bosscher; +Cc: gcc

    I think a few percentage, or even nothing at all, is significant
    because of the new infrastructure that's added, and the possibilities
    that it opens up.  That should also be taken into consideration.

Sure, but in that situation I feel it should stay in a branch until those
"possibilities" have indeed been "opened up".  Otherwise, it's a lot of
extra code to maintain and overhead to pay for in compilation without any
known benefit.  Newer is not always better.  Indeed I find that for most
of the products I buy, the quality is often *far* worse than that of the
same product purchased decades ago.

Whether or not (and to what extent) the tree-ssa infrastructure is
"significant" can't be made by arguments over possibilities it might open
up, but by demonstrating those possibilities.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17  3:21 Richard Kenner
  2004-01-17  3:26 ` Diego Novillo
  2004-01-19 23:30 ` Joe Buck
  0 siblings, 2 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-17  3:21 UTC (permalink / raw)
  To: s.bosscher; +Cc: gcc

    Expecting tree-ssa to produce code better by a factor of two is simply
    unreasonable.

In general, of course.  But if it is really allowing new classes of
optimizations to be performed (which was the argument to justify the new
infrastructure), it should be possible to construct test cases that show
that sort of performance improvement (factors of two or more).

Remember that the last time we had the discussion of the timing of tree-ssa,
people claimed it was "essential" for 3.5 since there was a tremendous
improvement on some C++ cases.  So let's see those cases.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17  3:15 Robert Dewar
  0 siblings, 0 replies; 192+ messages in thread
From: Robert Dewar @ 2004-01-17  3:15 UTC (permalink / raw)
  To: dnovillo, kenner, s.bosscher; +Cc: gcc

> Moore's Law: "Advances in hardware double computing power every 18 months".
> Proebsting's law: "Advances in compiler optimizations double computing
> power every 18 years".

That's actually a fairly optimistic position. I gave a talk at the compiler
conference some years ago on the subject of how successful advanced research
had been in slowing down compilers :-)

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17  2:56 Richard Kenner
  2004-01-17  3:14 ` Steven Bosscher
  0 siblings, 1 reply; 192+ messages in thread
From: Richard Kenner @ 2004-01-17  2:56 UTC (permalink / raw)
  To: s.bosscher; +Cc: gcc

    I would agree with you on principle.  But nobody is willing/able to
    update g77, and for Ada, everyone knows Kenner has done some work in
    this area but it's just not there and hasn't been for four years. So
    do you think we should wait until someone cares enough to make this
    transition?

I'm curious where the "four years" come from.  GNAT has been around
for roughly ten years, but work on integrating it with GCC 3 (the only
version for which function-at-a-time makes sense) was just starting up
about 2.5 years ago.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17  2:52 Richard Kenner
  2004-01-17  3:12 ` Steven Bosscher
  0 siblings, 1 reply; 192+ messages in thread
From: Richard Kenner @ 2004-01-17  2:52 UTC (permalink / raw)
  To: ghazi; +Cc: gcc

    My feeling on this matter is purely in the context of all those
    goodies promised.  If the new infrastructure is really that good, and
    we all agree this is the "future" of GCC, I can live with some
    frontends not working and asking it's community to pitch in and
    upgrade it.

That's the way I see it as well.  I see the only relevant timing issue
as being when the new infrastructure shows its desirability and
stability by being able to host the new classes of optimizations that
it was designed for.  If it does, we can live with some frontends not
working and even some regressions because major changes should be permitted
to cause some disruptions as they are being completed.

    Feel free to disagree with me.  But remember, they (tree-ssa
    advocates) promised a lot.  If it turns out to be just a different
    infrastructure, as opposed to a better one, I wouldn't feel the same.

Again, agreed.  Major changes require major benefits: if all we end up doing
is seeing a few percentage points either way, the tree-ssa project will have
been a failure.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re: [RFC] Contributing tree-ssa to mainline
@ 2004-01-17  2:39 Richard Kenner
  2004-01-17  3:04 ` Robert Dewar
  2004-01-19 14:48 ` Lars Segerlund
  0 siblings, 2 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-17  2:39 UTC (permalink / raw)
  To: gp; +Cc: gcc

    > As it is today, it is impossible to build an Ada compiler with the
    > branch.

    I'm afraid that's a blocker.

I disagree.  If every other criteria is met, I don't see that as a blocking
issue, mostly because that's not a "fault" of the tree-ssa project and it
would be unfair to hold them up while that work is being done.

At some point in the not too distant future, the Ada front end will handle
function-at-a-time and then converting it to using tree-ssa might be
something that the tree-ssa folks can either do or help with, but I don't see
this is a major timing issue: even if we had one release of GCC (say 3.5)
that didn't support Ada, it wouldn't be fatal and should not hold up tree-ssa
if it were ready before the Ada conversion was done.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* Re:  [RFC] Contributing tree-ssa to mainline
@ 2004-01-17  2:28 Richard Kenner
  2004-01-17  3:09 ` Steven Bosscher
                   ` (2 more replies)
  0 siblings, 3 replies; 192+ messages in thread
From: Richard Kenner @ 2004-01-17  2:28 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    First and foremost is the obvious question of whether people think that
    the whole infrastructure is worth adding to GCC at all.  From what we've
    discussed in the past few months, the consensus seems to be that it is. 
    But I think it's important to find out if folks think otherwise.

    If we decide to add SSA for 3.5, then we need to determine exactly how
    we are going to go about it.

My view is that I don't see this as something we can schedule (or even
decide) in advance.

As I said, I see the nature of the tree-ssa project as research rather than
development.  Nobody seemed to understand what I meant before, so let me
clarify because it's part of my answer to how I view the above issues.

In conventional software development (say for a game, avionics, or a linker),
you have a specification and well-defined process for taking that
specification and turning it into code.  You have a quite good idea when you
start how things are going to go and there are simple metrics for seeing how
far you are in the process.

In contrast, in a research project, what you start with is more a goal than a
specification.  You usually have an idea of how you're going about achieving
that goal, but the bulk of the project is in fleshing out the details of how
to achieve the goal rather than a straightforward programming project.  When
you start the project, you don't know in advance how things will go in detail
or even if you'll be able to achieve the goal.  There's usually no simple way
of seeing how far you've gotten in the project because of the lack of a good
metric: a long time may go by with no progress towards that goal or there
might be a "eureka moment" when great progress is made suddenly.

So I don't think we can or should ever answer in advance the question of when
(or even if) the tree-ssa branch will be ready, but instead work on defining
what criteria we'll use for making that determination.

In my mind, part of that criteria would be the transition of the work from
research to more conventional development, which means that it has passed the
experimental stages where people are seeing what does and doesn't work and
what works best.  But most important in my mind is having the work meet it's
goal.  So the question then becomes what *is* that goal.

Obviously, it's up to the people working on the project to clearly state what
they see as the goal and perhaps provide metrics to see if it's being met,
but roughly speaking I see the goal as making major improvements in
optimization by setting up an infrastructure for doing optimizations at a
high level.  I do *not* see the setting up of that infrastructure as itself a
useful benchmark: it needs to be shown that it actually *helps*.

The issue of whether or not the RTL optimizers can be eliminated or
simplified has been discussed a lot.  One argument would be that we should be
able to answer those questions before considering tree-ssa to be
"operational", but I'm not sure how strong an argument that is.

From a performance point of view, if all we do is *add* more optimizers
rather than replace some, the burden on those optimizers is higher since they
will increase compilation time.  On the other hand, doing more optimization
earlier will speed up the RTL optimizers by giving them less to work with, so
the strength of that concern is yet to be demonstrated.

My feeling is that "success" would be in showing at least one class of code
where we see very significantly better code (at least a factor of two) and we
see significant (around 10-20%) performance improvement in a larger class of
test cases.  If we leave the RTL optimizers in place, then we should *always*
be producing better code than without tree-ssa: any situation where we don't
strikes me as demonstrating something fundamental that needs more work; if we
replace some RTL optimizers, then I can see relaxing this standard if we see
our way to fixing those performance regressions without major redesign.  I
don't see compilation performace as being a major driver here unless it's a
major degradation.

I understand that the longer we keep the separate branch the more maintenance
cost we have, but the opposite error would be far worse: if it turns out that
the tree-ssa approach is not achieving its goal and we decide to
significantly postpone it (or even that it's not viable), backing it out in
the presence of lots of other unrelated work being put into the tree is a
*very* difficult prospect.  So I'd argue for a very conservative criteria for
merging it into the mainline.

^ permalink raw reply	[flat|nested] 192+ messages in thread
* [RFC] Contributing tree-ssa to mainline
@ 2004-01-17  0:19 Diego Novillo
  2004-01-17  0:31 ` Daniel Berlin
                   ` (6 more replies)
  0 siblings, 7 replies; 192+ messages in thread
From: Diego Novillo @ 2004-01-17  0:19 UTC (permalink / raw)
  To: gcc


Now that we are about to enter Stage 1 of 3.5, I wanted to solicit
feedback regarding the merge of the tree-ssa branch into mainline.

First and foremost is the obvious question of whether people think that
the whole infrastructure is worth adding to GCC at all.  From what we've
discussed in the past few months, the consensus seems to be that it is. 
But I think it's important to find out if folks think otherwise.

If we decide to add SSA for 3.5, then we need to determine exactly how
we are going to go about it.  I will try to summarize the more important
points to get the discussion going.  In the following I assume that we
have decided to add tree-ssa to GCC:


1- The changes in tree-ssa are pretty big.  A quick diff against the 3.4
branchpoint in the gcc directory shows

 11558 files changed, 161996 insertions(+), 14697 deletions(-), 30494 modifications(!)

Some of that is due to the drift since the latest merge, but that should
give you an idea.  That doesn't include changes to ../lib*.


2- Ada and g77 do not work anymore.  The new Fortran 95 front end
replaces g77, though I'm not sure what's the compatibility situation. 
There is no replacement for Ada.  As it is today, it is impossible to
build an Ada compiler with the branch.


3- There are several bug reports opened against the branch (92 as of
today).


4- The branch lags in performance wrt mainline by about 3% in SPECint
and is about 4% faster in SPECfp (take these numbers with a grain of
salt, this is from my daily SPEC runs).


So, there clearly is much work to be done yet.  A very conservative view
would be to declare the branch still not ripe for inclusion and wait for
GCC 3.6.

Pros	Mainline is not disrupted with such major changes.
	We avoid a possibly lengthy 3.5 cycle.
	Other major work can go in without worrying about the new
	infrastructure.

Cons	The SSA bits stay secluded without the benefits of the
	widespread testing done on mainline.
	Other major changes may interfere with tree-ssa, slowing down
	progress in the branch.
	Benefits given by the new infrastructure cannot be used for new
 	work.


Another thing to consider is that we need to have peer review for all
the changes done in the branch.  The implementation and/or design will
need to be reviewed and may require extensive changes.

If we are going to merge during Stage1, we could either phase in all the
changes separately or just drop the whole thing at once.  For reviewing
purposes, we probably want to phase-in.  Though, we could do the review
separately and then drop the whole thing.  The are few independent
chunks in the branch (listed in precedence order):

     1. Folder changes.
     2. GENERIC/GIMPLE.
     3. tree->rtl expanders.
     4. g95.
     5. SSA infrastructure
             A. operand discovery.
             B. alias analysis.
             C. pass manager.
             D. individual passes.

2 and 3 need to go in together and are the ones that prevent Ada and g77
from working.  So, once those are in, we can't go back.

I may be forgetting a bunch of stuff.  I would like to reach a consensus
soonish so that we can plan accordingly.


Thanks.  Diego.

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

end of thread, other threads:[~2004-01-29  0:00 UTC | newest]

Thread overview: 192+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-18 13:09 [RFC] Contributing tree-ssa to mainline Richard Kenner
  -- strict thread matches above, loose matches on Subject: below --
2004-01-20 12:36 Richard Kenner
2004-01-20 15:06 ` Daniel Jacobowitz
2004-01-20 15:14 ` Steven Bosscher
2004-01-20 16:14 ` Diego Novillo
2004-01-20 11:46 Richard Kenner
2004-01-20 11:57 ` Steven Bosscher
2004-01-20  4:35 Robert Dewar
2004-01-20  4:23 Richard Kenner
2004-01-20  4:28 ` Andrew Pinski
2004-01-20 11:15 ` Diego Novillo
2004-01-19 23:40 Richard Kenner
2004-01-19 23:15 Richard Kenner
2004-01-19 23:31 ` tm_gccmail
2004-01-19 19:13 Richard Kenner
2004-01-19 18:06 Richard Kenner
2004-01-19 16:12 Richard Kenner
2004-01-19 15:05 Richard Kenner
2004-01-19 15:56 ` law
2004-01-19 22:41 ` Andrew Pinski
2004-01-19 14:17 Richard Kenner
2004-01-19 14:46 ` Diego Novillo
2004-01-19 17:58 ` Dan Nicolaescu
2004-01-19 14:02 Richard Kenner
2004-01-19 12:29 Richard Kenner
2004-01-19 12:24 Richard Kenner
2004-01-19 12:31 ` Andrew Haley
2004-01-19 12:36 ` Paul Brook
2004-01-19 12:39   ` Paul Brook
2004-01-19 12:38 ` Andrew Haley
2004-01-19 12:49 ` Diego Novillo
2004-01-19 17:42   ` Geert Bosch
2004-01-19 17:51     ` Diego Novillo
2004-01-19 17:56       ` John R. Shannon
2004-01-19 18:02         ` Diego Novillo
2004-01-19 18:09       ` Geert Bosch
2004-01-19 18:27       ` Robert Dewar
2004-01-19 12:51 ` Jan Hubicka
2004-01-19 15:51   ` law
2004-01-19 17:30     ` Robert Dewar
2004-01-19 17:48       ` law
2004-01-19 17:57         ` Diego Novillo
2004-01-19 13:26 ` Theodore Papadopoulo
2004-01-19 14:23 ` Robert Dewar
2004-01-19 18:00 ` Tom Tromey
2004-01-19 18:11   ` Andrew Haley
2004-01-19 18:39   ` Jeff Sturm
2004-01-19 11:44 Richard Kenner
2004-01-19 12:00 ` Jan Hubicka
2004-01-19 12:13   ` Andrew Pinski
2004-01-19 12:12 ` Richard Henderson
2004-01-17 17:17 Dara Hazeghi
2004-01-19 17:23 ` law
2004-01-17 13:35 Richard Kenner
2004-01-17 14:05 ` Steven Bosscher
2004-01-17 15:26   ` Andreas Jaeger
2004-01-17 13:33 Richard Kenner
2004-01-17 13:29 Richard Kenner
2004-01-17 17:58 ` Diego Novillo
2004-01-17 13:20 Richard Kenner
2004-01-17  3:26 Richard Kenner
2004-01-17 14:49 ` Scott Robert Ladd
2004-01-17  3:21 Richard Kenner
2004-01-17  3:26 ` Diego Novillo
2004-01-17  5:52   ` Per Bothner
2004-01-17  6:09     ` Andrew Pinski
2004-01-18  2:46       ` Scott A Crosby
2004-01-17  8:00     ` Diego Novillo
2004-01-17 13:47   ` Florian Weimer
2004-01-17 14:48     ` Daniel Berlin
2004-01-17 14:53       ` Florian Weimer
2004-01-17 15:14         ` Daniel Berlin
2004-01-17 17:07       ` Joseph S. Myers
2004-01-17 17:14         ` Diego Novillo
2004-01-17 17:40           ` Daniel Berlin
2004-01-17 18:34         ` Mark Mitchell
2004-01-17 14:57     ` Diego Novillo
2004-01-19 23:30 ` Joe Buck
2004-01-19 23:43   ` Daniel Berlin
2004-01-20  0:20     ` Dale Johannesen
2004-01-20  3:12     ` Geert Bosch
2004-01-20  3:27       ` Diego Novillo
2004-01-17  3:15 Robert Dewar
2004-01-17  2:56 Richard Kenner
2004-01-17  3:14 ` Steven Bosscher
2004-01-17  3:20   ` Diego Novillo
2004-01-17  2:52 Richard Kenner
2004-01-17  3:12 ` Steven Bosscher
2004-01-17  2:39 Richard Kenner
2004-01-17  3:04 ` Robert Dewar
2004-01-17 16:55   ` Gerald Pfeifer
2004-01-19 14:48 ` Lars Segerlund
2004-01-19 23:37   ` Joe Buck
2004-01-17  2:28 Richard Kenner
2004-01-17  3:09 ` Steven Bosscher
2004-01-17  5:04   ` Roger Sayle
2004-01-17  5:31     ` Diego Novillo
2004-01-17  6:04       ` Roger Sayle
2004-01-17  6:19       ` David Edelsohn
2004-01-17 14:54       ` Scott Robert Ladd
2004-01-17 14:01     ` Jan Hubicka
2004-01-17 14:20       ` Roger Sayle
2004-01-17 14:29         ` Roger Sayle
2004-01-17 14:44           ` Jan Hubicka
2004-01-17 15:07             ` Jan Hubicka
2004-01-17 14:37         ` Jan Hubicka
2004-01-17 21:32   ` Richard Henderson
2004-01-17 21:45     ` Diego Novillo
2004-01-17  5:06 ` Diego Novillo
2004-01-17  6:13 ` law
2004-01-17 12:07   ` Robert Dewar
2004-01-17 12:15     ` John R. Shannon
2004-01-19 23:46   ` Joe Buck
2004-01-17  0:19 Diego Novillo
2004-01-17  0:31 ` Daniel Berlin
2004-01-17  0:35 ` Andrew Pinski
2004-01-17  0:44 ` Gerald Pfeifer
2004-01-17  0:53   ` law
2004-01-17  0:54   ` law
2004-01-17  1:37     ` Gerald Pfeifer
2004-01-17  1:46       ` Diego Novillo
2004-01-17  0:55   ` Eric Christopher
2004-01-17  2:48     ` Robert Dewar
2004-01-17 22:08       ` Eric Christopher
2004-01-17  1:02   ` Joseph S. Myers
2004-01-17  1:51     ` Kaveh R. Ghazi
2004-01-17  2:01       ` Gabriel Dos Reis
2004-01-17  2:17         ` Kaveh R. Ghazi
2004-01-17  3:01           ` Daniel Berlin
2004-01-17  2:19         ` Steven Bosscher
2004-01-17  3:02           ` Robert Dewar
2004-01-17  3:55             ` Andrew Pinski
2004-01-17  3:36       ` Diego Novillo
2004-01-17 13:06         ` Giovanni Bajo
2004-01-17 13:53         ` Jan Hubicka
2004-01-18  7:01           ` law
2004-01-17 17:04         ` Kaveh R. Ghazi
2004-01-17 17:16           ` Scott Robert Ladd
2004-01-17 17:30             ` Kaveh R. Ghazi
2004-01-17 17:50               ` Scott Robert Ladd
2004-01-17 17:37             ` Robert Dewar
2004-01-17 17:46               ` Joseph S. Myers
2004-01-17 17:51                 ` Robert Dewar
2004-01-17 18:11                   ` Joseph S. Myers
2004-01-17 19:12                     ` Arnaud Charlet
2004-01-29  0:36                       ` Robert Dewar
2004-01-29  0:00                     ` Robert Dewar
2004-01-17 17:58               ` Scott Robert Ladd
2004-01-17 18:09                 ` Joseph S. Myers
2004-01-17 18:06           ` Mark Mitchell
2004-01-18  7:15           ` law
2004-01-18 15:50             ` Daniel Berlin
2004-01-17 17:12         ` Kaveh R. Ghazi
2004-01-17 17:26           ` Diego Novillo
2004-01-17  5:31     ` Diego Novillo
2004-01-17  6:15       ` law
2004-01-17  6:22         ` Andrew Pinski
2004-01-17  6:38         ` Diego Novillo
2004-01-17 14:45         ` Daniel Berlin
2004-01-17 21:23           ` law
2004-01-17 21:33             ` Steven Bosscher
2004-01-18  2:34               ` Zack Weinberg
2004-01-17 11:16       ` Joseph S. Myers
2004-01-17 17:50         ` Diego Novillo
2004-01-17 18:06           ` Joseph S. Myers
2004-01-17 20:14           ` Steven Bosscher
2004-01-17 23:38         ` Toon Moene
2004-01-18  1:06           ` Phil Edwards
2004-01-17  2:15   ` Steven Bosscher
2004-01-17  3:01     ` Robert Dewar
2004-01-17 11:08 ` Andrew Walrond
2004-01-17 23:33   ` Toon Moene
2004-01-17 14:30 ` Scott Robert Ladd
2004-01-17 14:57   ` Paul Brook
2004-01-17 15:28     ` Scott Robert Ladd
2004-01-17 21:24     ` law
2004-01-17 21:47       ` Diego Novillo
2004-01-17 19:01 ` Mark Mitchell
2004-01-17 19:23   ` Andrew Pinski
2004-01-18  0:14     ` Toon Moene
2004-01-20  1:39   ` Kaveh R. Ghazi
2004-01-20  2:00     ` Gabriel Dos Reis
2004-01-20  2:08       ` Mark Mitchell
2004-01-20  2:31         ` Gabriel Dos Reis
2004-01-20 15:19       ` Scott Robert Ladd
2004-01-20 15:27         ` Andrew Haley
2004-01-20  2:09     ` Diego Novillo
2004-01-22  8:49     ` Gerald Pfeifer
2004-01-17 19:22 ` Daniel Jacobowitz
2004-01-17 19:34   ` Richard Guenther
2004-01-17 20:21     ` Steven Bosscher
2004-01-18  1:24     ` David Edelsohn

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).