This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Simple benchmarks with gcc-3_0-branch
- To: Daniel Berlin <dberlin at redhat dot com>
- Subject: Re: Simple benchmarks with gcc-3_0-branch
- From: Michael Matz <matzmich at cs dot tu-berlin dot de>
- Date: Sun, 18 Feb 2001 17:37:25 +0100 (MET)
- cc: Brad Lucier <lucier at math dot purdue dot edu>, Toshi Morita <tm2 at best dot com>, <gcc at gcc dot gnu dot org>
Hi,
On 16 Feb 2001, Daniel Berlin wrote:
> > But I'm afraid that this won't help very much when all pseudo's are
> > (falsely, but semi-usefully) declared dead at the beginning of these
> > blocks that are the targets of abnormal edges.
>
> From what I remember, this was the simplest thing to do, no?
Yes.
> What are the other options?
We talk here about moving possibly trapping partial redundant
expressions across unsplittable critical edges. Those expressions can't
be placed on such an edge (cause its unsplittable). There are multipe
ways to avoid this:
1) simply declare all such expressions dead on targets of abnormal edges.
This is currently done, see below, what it prevents;
2) do LCM as if those edges would be splittable, and only if an expr
actually gets inserted on such an edge, declare it (and only this
expr) dead on the edge target. Then rerun LCM with that added information.
3) do LCM correct in the presence of abnormal edges. This involves either
bidirectional analysis, or inserting fake edges to the flow graph or a
hybrid approach, which is rather uncomplicated. I've some papers on this,
but didn't come around to implement this, also because of a mismatch
between current implementation in gcc (edge based, which isn't going to
change) and theory (block based). I know I promised multiple times to
implement this, but time constrains, a diploma thesis and new-regalloc
make things difficult ;)
As to what is prevented by the simple approach taken right now in gcc: If
an trapping expr would be moved to a normal splittable edge, all would
simply work. If now on the way to that edge the expr is walking over an
abnormal edge, it's declared dead, and the moving (although finally valid)
would be prevented. This would be avoided by the second approach, which
then of course requires some more passes through BCM/LCM.
Ciao,
Michael.