This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: -fssa is broken


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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]