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