This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: GCC IMA & general future proposal
- From: Kenneth Zadeck <zadeck at naturalbridge dot com>
- To: Geoff Keating <geoffk at geoffk dot org>
- Cc: GCC List <gcc at gcc dot gnu dot org>, Caroline Tice <ctice at apple dot com>,Steven Bosscher <stevenb at suse dot de>,Daniel Berlin <dberlin at dberlin dot org>,Dale Johannesen <dalej at apple dot com>, Jan Hubicka <jh at suse dot cz>
- Date: Wed, 27 Oct 2004 09:31:33 -0400
- Subject: Re: GCC IMA & general future proposal
- References: <7D87A70E-27F5-11D9-8458-000A95B1F520@geoffk.org>
There are significant advantages to do doing a fair amount of
optimization while you still have only a single file before you dump the
il to the object file.
1) The techniques that one would use for a single file are different
than those that one can consider over an entire program. There are
significant power vs scaling tradeoffs in algorithm selection. For
instance at the single file level, almost all of the algorithms one
would use are flow sensitive. At the link level almost all of the
techniques will have to be flow insensitive.
2) The more of the computation time you are able to push to the earlier
compiler, the better the user experience will be, especially in the late
debugging and change cycle. Anytime anything changes, you are starting
the link level from scratch, in a development only one module changes,
having pushed most of the heavy lifting to the earlier compile will be a
big win. While some of the compiler will surely be common between the
link level and the front level, you have to assume that there are going
to be a lot of differences.
I would also point out that a significant number of people are not going
to be able to use the full power of the link level stuff, so putting all
smarts there may not be the best plan. Programs that require dynamic
libraries or that dynamicly load modules (like operating systems) may
not work with this without significant engineering on their build
scripts to describe where the boundaries are and what can pass over
them. The structure stuff that is being done at Apple is based on a
completely closed world assumption that the only library is the standard
c library. Fine for benchmarks and the compiler, but may not be so good
for a big gooey applications.
I should point out that the intel compiler is a bad example to base
anything on. It is simply a marketing tool to sell more processors and
as such is designed to make benchmarks run particularly well on intel
hardware. Anything else is not so good. Remember that this is the
compiler that generates delibertly bad code to be used when you run on
an amd chip.
It detects the cpu model and refuses to use any vector instructions even
though it knows the amd chips have them. As such, they have guaranteed
that no one will use the compiler for anything except benchmarking. The
ibm compiler is a better model. This is the compiler that is used to
develop all ibm applications.
Kenny
Geoff Keating wrote:
I've put a quick draft of my idea of what the future of GCC should
look like at
<http://www.geoffk.org/gcc/future/gccfuture.html>
It's short, but has a complicated diagram. It is intended for
discussion at the meeting in a few hours.