This is the mail archive of the
gcc-regression@gcc.gnu.org
mailing list for the GCC project.
Re: 4 GCC regressions, 2 new, with your patch on 2002-05-02T18:01:59Z.
- From: Jan Hubicka <jh at suse dot cz>
- To: Jan Hubicka <jh at suse dot cz>
- Cc: gcc-regression at gcc dot gnu dot org, dave at hiauly1 dot hia dot nrc dot ca,davem at redhat dot com, marcjero at yahoo dot com, rth at cygnus dot com,gcc-patches at gcc dot gnu dot org
- Date: Fri, 3 May 2002 11:53:20 +0200
- Subject: Re: 4 GCC regressions, 2 new, with your patch on 2002-05-02T18:01:59Z.
- References: <200205022113.g42LDZi20865@maat.sfbay.redhat.com> <20020503082627.GC22728@atrey.karlin.mff.cuni.cz>
> > With your recent patch, GCC has some regression test failures, which
> > used to pass. There are 2 new failures, and 2
> > failures that existed before and after that patch; 0 failures
> > have been fixed.
> >
> > The new failures are:
> > powerpc-eabisim gcc.sum gcc.c-torture/execute/20011219-1.c
> > native gcc.sum gcc.c-torture/execute/20011219-1.c
Hi,
the problem is that elliminable tablejump is not elliminated anymore
and later, killed by merge_blocks in wrong way. The attached
patch restrict merge_blocks to simplejumps. This should not lose valid
optimizations as the jump will get converted to simplejump by other
optimization.
Bootstrapped/regtested i386 mainline
Honza
Fri May 3 11:12:24 CEST 2002 Jan Hubicka <jh@suse.cz>
* cfgcleanup.c (try_optimize_cfg): Call merge_block only when
jump is simplejump.
Index: cfgcleanup.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cfgcleanup.c,v
retrieving revision 1.49
diff -c -3 -p -r1.49 cfgcleanup.c
*** cfgcleanup.c 1 May 2002 20:20:19 -0000 1.49
--- cfgcleanup.c 3 May 2002 09:04:01 -0000
*************** try_optimize_cfg (mode)
*** 1684,1690 ****
/* If the jump insn has side effects,
we can't kill the edge. */
&& (GET_CODE (b->end) != JUMP_INSN
! || onlyjump_p (b->end))
&& merge_blocks (s, b, c, mode))
changed_here = true;
--- 1684,1690 ----
/* If the jump insn has side effects,
we can't kill the edge. */
&& (GET_CODE (b->end) != JUMP_INSN
! || simplejump_p (b->end))
&& merge_blocks (s, b, c, mode))
changed_here = true;