new bootstrap failure on Solaris *and* SunOS4. flow/combine/sched

Richard Henderson rth@cygnus.com
Thu Sep 30 19:57:00 GMT 1999


On Wed, Sep 08, 1999 at 02:13:59PM -0600, Jeffrey A Law wrote:
> Ah.  I stopped reading at the early exit point on the assumption that it
> was correct :-)

Well, bootstraps on x86, alpha and sparc have survived without
that early out.  I should perhaps do some archaeology to find 
out where that block came from (either Bob or something older).

About the multi-register split, I'm really tempted to spend my
time making the life_analysis and attach_deaths code smarter 
than spend it making update_life_analysis dumber.  We'll see.


r~

	* flow.c (new_insn_dead_notes): Don't early out for preexisting regs.

Index: flow.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/flow.c,v
retrieving revision 1.148
diff -c -p -d -r1.148 flow.c
*** flow.c	1999/09/08 07:34:47	1.148
--- flow.c	1999/09/08 23:39:59
*************** new_insn_dead_notes (pat, insn, first, l
*** 5351,5356 ****
--- 5351,5357 ----
  
    if (GET_CODE (dest) == REG)
      {
+ #if 0
        /* If the original insns already used this register, we may not
           add new notes for it.  One example for a replacement that
           needs this test is when a multi-word memory access with
*************** new_insn_dead_notes (pat, insn, first, l
*** 5370,5376 ****
--- 5371,5388 ----
  	 REG_DEAD notes. This can probably be accurately done by
  	 calling mark_referenced_resources() on the old stream before
  	 replacing the old insns.  */
+       /* ??? The conclusion reached here -- that we can't add DEAD notes
+ 	 when the register is preexisting -- is false.  I can't envision
+ 	 a sequence postulated above that wouldn't be properly handled
+ 	 by the code below.  In the meantime, consider the 1->2 split
  
+ 	    (set (reg:SI 100) (ne:SI (reg:SI 100) (const_int 0)))
+ 	 to
+ 	    (set (reg:CC icc) (compare:CC (reg:SI 100) (const_int 0)))
+ 	    (set (reg:SI 100) (ne:SI (reg:CC icc) (const_int 0)))
+ 
+ 	 We do in fact need a new DEAD note on the first insn for reg 100.  */
+ 
        for (tem = orig_first_insn; tem != NULL_RTX; tem = NEXT_INSN (tem))
  	{
  	  if (GET_RTX_CLASS (GET_CODE (tem)) == 'i'
*************** new_insn_dead_notes (pat, insn, first, l
*** 5379,5384 ****
--- 5391,5397 ----
  	  if (tem == orig_last_insn)
  	    break;
  	}
+ #endif
  
        /* So it's a new register, presumably only used within this
  	 group of insns. Find the last insn in the set of new insns



More information about the Gcc-bugs mailing list