This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [lno] ICE in coalesce_abnormal_edges, at tree-outof-ssa.c:645
- From: Andrew MacLeod <amacleod at redhat dot com>
- To: Richard Guenther <rguenth at tat dot physik dot uni-tuebingen dot de>
- Cc: gcc mailing list <gcc at gcc dot gnu dot org>
- Date: 16 Apr 2004 10:28:38 -0400
- Subject: Re: [lno] ICE in coalesce_abnormal_edges, at tree-outof-ssa.c:645
- References: <Pine.LNX.4.53.0404161555060.8230@bellatrix.tat.physik.uni-tuebingen.de>
On Fri, 2004-04-16 at 09:57, Richard Guenther wrote:
> With the tramp3d-v3.cpp testcase I get an ICE with todays lno branch if
> compiling with -O2 -funroll-loops -ffast-math -march=athlon:
>
> Conflict pt_466 and pt_435 across an abnormal edge from BB17->BB19
>
> Maybe a merge from tree-ssa would help (ICE doesn't look lno related at
> first look)
>
That typically means someone has extended the live range of a variable
across an abnormal edge, causing a conflict between either 2 arguments
of a PHI node or the result of the PHI and an argument. Because its an
abnormal edge, there is nowhere to insert a copy to resolve the issue.
That means whenever we try to move things across abnormal edges, we have
to make sure we aren't going to introduce this problem.
I believe most places where it matters check for
SSA_NAME_OCCURS_IN_ABNORMAL_PHI. So either an optimization is not
checking this flag, or has created a variable an not updated the flag.
Someone needs to check the listing going into blah.c.*.optimized
(either a 'detail' .optimized, or the precedding dump file), the message
above indicates which 2 variables are live, and what edge they are live
across. Determine which optimization moved/created either pt_466 or
pt_435. There is likely a PHI in BB19 which is the problem.
I'll take a peek at the listing if you send it to me. I dont have an lno
branch, but it sounds very much like an lno optimization just moving the
wrong thing. Its possible its someone else and lno is just exposing it,
who knows :-)
Andrew