GCC build failed on hppa-unknown-linux-gnu

Jan Hubicka jh@suse.cz
Sat Jan 17 23:53:00 GMT 2004


> > I've send a followup fixing one problem in the patch:
> > 2004-01-15  Jan Hubicka  <jh@suse.cz>
> > 
> >         PR bootstrap/13692
> >         * sched-deps.c (sched_analyze_1, sched_analyze_2): Fix thinko in previous patch.
> > 
> 
> This problem is fixed.  I think the message to you hung in the mail queue
> on my machine.  For some reason, it has problems with lookups for suse.cz
> from time to time.
> 
> We are now on to a new problem, I think related to the recent tablejump
> changes by you and Geoffrey Keating:
> 
> http://gcc.gnu.org/ml/gcc-regression/2004-01/msg00147.html
If you can check the attached patch after reverting the Geoff's, it would help.

Index: basic-block.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/basic-block.h,v
retrieving revision 1.186
diff -c -3 -p -r1.186 basic-block.h
*** basic-block.h	30 Dec 2003 10:40:48 -0000	1.186
--- basic-block.h	17 Jan 2004 20:51:54 -0000
*************** extern void iterate_fix_dominators (enum
*** 640,645 ****
--- 640,646 ----
  extern void verify_dominators (enum cdi_direction);
  extern basic_block first_dom_son (enum cdi_direction, basic_block);
  extern basic_block next_dom_son (enum cdi_direction, basic_block);
+ extern bool try_redirect_by_replacing_jump (edge, basic_block, bool);
  
  #include "cfghooks.h"
  
Index: cfgcleanup.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgcleanup.c,v
retrieving revision 1.99
diff -c -3 -p -r1.99 cfgcleanup.c
*** cfgcleanup.c	16 Jan 2004 11:30:47 -0000	1.99
--- cfgcleanup.c	17 Jan 2004 20:51:54 -0000
*************** try_optimize_cfg (int mode)
*** 1785,1797 ****
  	      /* If B has a single outgoing edge, but uses a
  		 non-trivial jump instruction without side-effects, we
  		 can either delete the jump entirely, or replace it
! 		 with a simple unconditional jump.  Use
! 		 redirect_edge_and_branch to do the dirty work.  */
  	      if (b->succ
  		  && ! b->succ->succ_next
  		  && b->succ->dest != EXIT_BLOCK_PTR
  		  && onlyjump_p (BB_END (b))
! 		  && redirect_edge_and_branch (b->succ, b->succ->dest))
  		{
  		  update_forwarder_flag (b);
  		  changed_here = true;
--- 1785,1797 ----
  	      /* If B has a single outgoing edge, but uses a
  		 non-trivial jump instruction without side-effects, we
  		 can either delete the jump entirely, or replace it
! 		 with a simple unconditional jump.  */
  	      if (b->succ
  		  && ! b->succ->succ_next
  		  && b->succ->dest != EXIT_BLOCK_PTR
  		  && onlyjump_p (BB_END (b))
! 		  && try_redirect_by_replacing_jump (b->succ, b->succ->dest,
! 						     (mode & CLEANUP_CFGLAYOUT)))
  		{
  		  update_forwarder_flag (b);
  		  changed_here = true;
Index: cfgrtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgrtl.c,v
retrieving revision 1.104
diff -c -3 -p -r1.104 cfgrtl.c
*** cfgrtl.c	17 Jan 2004 07:46:49 -0000	1.104
--- cfgrtl.c	17 Jan 2004 20:51:55 -0000
*************** block_label (basic_block block)
*** 687,693 ****
     apply only if all edges now point to the same block.  The parameters and
     return values are equivalent to redirect_edge_and_branch.  */
  
! static bool
  try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout)
  {
    basic_block src = e->src;
--- 687,693 ----
     apply only if all edges now point to the same block.  The parameters and
     return values are equivalent to redirect_edge_and_branch.  */
  
! bool
  try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout)
  {
    basic_block src = e->src;
*************** rtl_redirect_edge_and_branch (edge e, ba
*** 971,985 ****
    if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))
      return false;
  
    if (try_redirect_by_replacing_jump (e, target, false))
      return true;
  
!   /* Do this fast path late, as we want above code to simplify for cases
!      where called on single edge leaving basic block containing nontrivial
!      jump insn.  */
!   else if (e->dest == target)
!     return false;
!   else if (!redirect_branch_edge (e, target))
      return false;
  
    return true;
--- 971,983 ----
    if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))
      return false;
  
+   if (e->dest == target)
+     return true;
+ 
    if (try_redirect_by_replacing_jump (e, target, false))
      return true;
  
!   if (!redirect_branch_edge (e, target))
      return false;
  
    return true;
*************** cfg_layout_redirect_edge_and_branch (edg
*** 2437,2447 ****
    if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))
      return false;
  
!   if (e->src != ENTRY_BLOCK_PTR
!       && try_redirect_by_replacing_jump (e, dest, true))
      return true;
  
!   if (e->dest == dest)
      return true;
  
    if (e->src == ENTRY_BLOCK_PTR
--- 2435,2445 ----
    if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))
      return false;
  
!   if (e->dest == dest)
      return true;
  
!   if (e->src != ENTRY_BLOCK_PTR
!       && try_redirect_by_replacing_jump (e, dest, true))
      return true;
  
    if (e->src == ENTRY_BLOCK_PTR
*************** cfg_layout_merge_blocks (basic_block a, 
*** 2627,2633 ****
    /* We should have fallthru edge in a, or we can do dummy redirection to get
       it cleaned up.  */
    if (GET_CODE (BB_END (a)) == JUMP_INSN)
!     redirect_edge_and_branch (a->succ, b);
    if (GET_CODE (BB_END (a)) == JUMP_INSN)
      abort ();
  
--- 2625,2631 ----
    /* We should have fallthru edge in a, or we can do dummy redirection to get
       it cleaned up.  */
    if (GET_CODE (BB_END (a)) == JUMP_INSN)
!     try_redirect_by_replacing_jump (a->succ, b, true);
    if (GET_CODE (BB_END (a)) == JUMP_INSN)
      abort ();
  



More information about the Gcc-regression mailing list