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]
Other format: [Raw text]

Re: New code committed to DATAFLOW BRANCH


> This code has been bootstrapped and tested on three platforms:
> i686-pc-linux-gnu, x86_64-unknown-linux-gnu and
> powerpc64-unknown-linux-gnu. 
> 
> It causes a new regression failure on i686 platform.  This regression
> failure is
> in reg-stack with the gcc/testsuite/gcc.c-torture/compile/920409-2.c at -O2.

Hi,
we've run across this problem once already.  It is caused by reg-stack
sanity checking that USE is not given for dead register.  I originally
added the check just to verify that liveness represented by USEs match
the flow.c'c new idea of liveness (originally flow didn't know for
instance that return register is live at return and USE enforced it, Rth
changed this while back but USEs had to stay at place for reload and
reorg passes that didn't use new dataflow).

Since your new liveness is more aggressive and because we are ignoring
uses for purpose of dataflow (and we did so before dataflow branch too
as part of the transition away from USEs), we are now getting missmatch.
It is safe to ignore it.  

Honza

2006-03-16  Jan Hubicka  <jh@suse.cz>
	* reg-stack.c (subst_stack_regs_pat): Kill check that USEd
	register is live.

Index: reg-stack.c
===================================================================
*** reg-stack.c	(revision 112130)
--- reg-stack.c	(working copy)
*************** subst_stack_regs_pat (rtx insn, stack re
*** 1327,1335 ****
  	    emit_pop_insn (insn, regstack, *src, EMIT_AFTER);
  	  return control_flow_insn_deleted;
  	}
!       /* ??? Uninitialized USE should not happen.  */
!       else
! 	gcc_assert (get_hard_regnum (regstack, *src) != -1);
        break;
  
      case CLOBBER:
--- 1327,1338 ----
  	    emit_pop_insn (insn, regstack, *src, EMIT_AFTER);
  	  return control_flow_insn_deleted;
  	}
!       /* Uninitialized USE might happen for functions returning uninitialized
!          value.  We will properly initialize the USE on the edge to EXIT_BLOCK,
! 	 so it is safe to ignore the use here. This is consistent with behaviour
! 	 of dataflow analyzer that ignores USE too.  (This also imply that 
! 	 forcingly initializing the register to NaN here would lead to ICE later,
! 	 since the REG_DEAD notes are not issued.)  */
        break;
  
      case CLOBBER:


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