This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: -fssa is broken
- To: Richard Henderson <rth at cygnus dot com>
- Subject: Re: -fssa is broken
- From: Clinton Popetz <cpopetz at cygnus dot com>
- Date: Fri, 19 May 2000 12:10:21 -0500
- Cc: Andreas Jaeger <aj at suse dot de>, gcc-patches at gcc dot gnu dot org, Alex Samuel <samuel at codesourcery dot com>, Ulrich Drepper <drepper at cygnus dot com>
- References: <u8em719tjz.fsf@gromit.rhein-neckar.de> <20000518210103.C11020@cygnus.com>
On Thu, May 18, 2000 at 09:01:03PM -0700, Richard Henderson wrote:
> On Wed, May 17, 2000 at 03:48:16PM +0200, Andreas Jaeger wrote:
> > I couldn't find a small example of this breakage. If anybody wants to
> > find out what's broken, I can try to assist - but I don't know where
> > to look and how to hunt this down.
>
> Uli tracked down the point of failure for me before he went travelling.
> I've forgotten in the meantime the exact details.
>
> The problem was in the register partitioning while converting back from
> SSA form. We didn't properly notice that a use of a variable in between
> a PHI and an increment meant that there should have been a conflict.
> The result is that the use saw the value after the increment rather
> than the value before the increment.
>
> Or something like that. Sigh. I guess I'll have to track it down again...
conflict_graph_compute is relying on death notes, but we weren't creating them.
Also, I noticed an unrelated think-o when scanning abornmal critical edges,
causing us doing too much work.
Fri May 19 12:05:13 2000 Clinton Popetz <cpopetz@cygnus.com>
* ssa.c (convert_from_ssa): Tell life_analysis we need death
notes.
(make_regs_equivalent_over_bad_edges): Only look at abnormal
critical edges.
Index: ssa.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ssa.c,v
retrieving revision 1.12
diff -c -2 -p -r1.12 ssa.c
*** ssa.c 2000/05/04 17:58:40 1.12
--- ssa.c 2000/05/19 17:03:18
*************** convert_from_ssa()
*** 1813,1817 ****
/* Need global_live_at_{start,end} up to date. */
! life_analysis (insns, NULL, PROP_KILL_DEAD_CODE | PROP_SCAN_DEAD_CODE);
/* Figure out which regs in copies and phi nodes don't conflict and
--- 1814,1819 ----
/* Need global_live_at_{start,end} up to date. */
! life_analysis (insns, NULL,
! PROP_KILL_DEAD_CODE | PROP_SCAN_DEAD_CODE | PROP_DEATH_NOTES);
/* Figure out which regs in copies and phi nodes don't conflict and
*************** make_regs_equivalent_over_bad_edges (bb,
*** 1222,1226 ****
/* Scan incoming abnormal critical edges. */
for (e = b->pred; e; e = e->pred_next)
! if (e->flags & (EDGE_ABNORMAL | EDGE_CRITICAL))
{
rtx *alt = phi_alternative (set, e->src->index);
--- 1222,1227 ----
/* Scan incoming abnormal critical edges. */
for (e = b->pred; e; e = e->pred_next)
! if ((e->flags & (EDGE_ABNORMAL | EDGE_CRITICAL))
! == (EDGE_ABNORMAL | EDGE_CRITICAL))
{
rtx *alt = phi_alternative (set, e->src->index);