This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Re: [tree-ssa] Gimplifying Java
- From: Andrew MacLeod <amacleod at redhat dot com>
- To: Jeff Law <law at redhat dot com>
- Cc: Jeff Sturm <jsturm at one-point dot com>, java-patches at gcc dot gnu dot org,gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: 11 Jun 2003 22:45:28 -0400
- Subject: Re: [tree-ssa] Gimplifying Java
- References: <200306120035.h5C0Zmwd015755@speedy.slc.redhat.com>
On Wed, 2003-06-11 at 20:35, law@redhat.com wrote:
> In message <Pine.LNX.4.44.0306111928540.10620-100000@ops2.one-point.com>, Jeff
> Sturm writes:
> >Following is my first attempt to merge the gcj source frontend with the
> >The other two are apparently caused by wrong code generated in the
> >out-of-SSA pass (insert_copy_on_edge intializes a local variable to an
> >unitialized temporary).
> >
> >I can probably fix the first failure drawing upon several good ideas from
> >the mailing list. The out of SSA pass is still beyond my comprehension,
> >though I wonder if this isn't related to one of the known shortcomings,
> >such as live range overlapping. (I do have a test case.)
> Well, overlapping live ranges is supposed to work now, so I'm sure
> Andrew would like to have a testcase.
>
yes :-). Althought Ive been thinking about how to make it easier for
people to figure out whats actually wrong instead of it having to funnel
through me. Its currently kinda a black box :-)
Yes, a testcase would be most excellent.
Insert_copy_on_edge only ever inserts a copy because a PHI node requires
it.
ie,
a_4 = PHI <a_2(3), a_3(6)>
If a copy gets inserted on the edge from block 3, we'll get
a_4 = a_2
on the edge... and that will typically mean that a_4 and a_2 , or at
least the groups they have coalesced with, interfere, so a new temporary
is required for one of them.
More often than not, this is caused by an incorrect hunk of code which
either doesn't have a def of a_2, or a_2 is live coming in from the
wrong block. This make the live range analysis code cause the variable
to be live all the way to the top of the program..
In any case, Im planning to make the out of SSA pass show what it thinks
is live-on-entry, and what it think is incorrect. (if there is a DEF of
something, and live range analysis thinks it live on entry as well,
thats 99.99% likely to be a bug someone has introduced... for instance)
This kind of reporting will help other catch things much quicker I think
:-)
Andrew