LTO, LLVM, etc.
Chris Lattner
clattner@apple.com
Tue Dec 6 01:45:00 GMT 2005
On Dec 5, 2005, at 5:27 PM, Mark Mitchell wrote:
> Steven Bosscher wrote:
>> IMVHO dumping for "export" and front-end tools and for the optimizers
>> should not be coupled like this. Iff we decide to dump trees, then I
>> would hope the dumper would dump GIMPLE only, not the full front end
>> and middle-end tree representation.
> It's not that I would object to waking up one day to find out that the
> C++ front-end no longer used Tree, but it just doesn't seem very
> compelling to me.
I agree with you. The 'tree' data structure is conceptually what we
want for the front-ends to represent the code. They are quite
similar in spirit to many AST representations.
>> Sharing a tree dumper between the front ends and the middle-end would
>> only make it more difficult again to move to sane data structures for
>> the middle end and to cleaner data structures for the front ends.
> The differences between GIMPLE and C++ Trees are small, structurally;
> there are just a lot of extra nodes in C++ that never reach
> GIMPLE. If
> we had a tree dumper for one, we'd get the other one almost for free.
> So, I don't think sharing the tree dumper stands in the way of
> anything;
> you can still switch either part of the compiler to use non-Tree
> whenever you like. You'll just need a new dumper, which you would
> have
> wanted anyhow.
The point that I'm arguing (and I believe Steven agrees with) is that
trees make a poor representation for optimization. Their use in tree-
ssa has lead to a representation that takes hundreds of bytes and
half a dozen separate allocations for each gimple operation. From
the efficiency standpoint alone, it doesn't make sense to use trees
for optimization.
Further, I would point out that it actually HURTS the front-ends to
have the optimizers using trees. We are getting very close to the
time when there are not enough tree codes to go around, and there is
still a great demand for new ones. Many of these tree codes are
front-end specific (e.g. BIND_EXPR and various OpenMP nodes) and
many of them are backend specific (e.g. the various nodes for the
vectorizer). Having the front-end and the back-end using the same
enum *will* have a short term cost if the size of the tree enum field
needs to be increased.
-Chris
More information about the Gcc
mailing list