This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Bug rtl-optimization/16060] [3.5 Regression] ICE 'unrecognizable insn' with -ftracer
- From: Joern Rennecke <joern dot rennecke at superh dot com>
- To: gcc-bugzilla at gcc dot gnu dot org
- Cc: ctice at apple dot com (Caroline Tice), gcc-patches at gcc dot gnu dot org
- Date: Mon, 21 Jun 2004 14:58:51 +0100 (BST)
- Subject: Re: [Bug rtl-optimization/16060] [3.5 Regression] ICE 'unrecognizable insn' with -ftracer
> I think this is a very recent regression caused by (or one of the followup):
> 2004-06-14 J"orn Rennecke <joern.rennecke@superh.com>
>
> * basic-block.h (could_fall_through): Declare.
> * cfganal.c (can_fallthru): Succeed if the target is EXIT_BLOCK_PTR.
> Fail if the source already has a fallthrough edge to the exit
> block pointer.
> (could_fall_through): New function.
> * cfgbuild.c (make_edges): Check if we already have a fallthrough
> edge to the exit block pointer.
> * cfglayout.c (fixup_fallthru_exit_predecessor): Check that it is
> not called before reload has completed.
> Handle special case of first block having a fall-through exit edge.
> (cfg_layout_finalize): Don't call it before reload or if we have
> rtl epilogues.
> (fixup_reorder_chain): A fall through to the exit block does not
> require the block to come last. Add sanity checks.
> * cfgrtl.c (rtl_split_edge): Add special handling of fall through
> edges to the exit block.
> * function.c (cfglayout.h): #include.
> (thread_prologue_and_epilogue_insns): If we have neither return nor
> epilogue, but a fall through to the exit block from mid-function,
> force a non-fall-through exit.
> * Makefile.in (function.o): Depend on CFGLAYOUT_H.
The appended testcase makes the compilation succeed for the testcase;
I am currently bootstrapping / regtesting this for i686-pc-linux-gnu.
2004-06-21 J"orn Rennecke <joern.rennecke@superh.com>
* cfglayout.c (fixup_reorder_chain): Don't do anything for
e_fall->dest == EXIT_BLOCK_PTR.
Index: cfglayout.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfglayout.c,v
retrieving revision 1.59.2.5
diff -p -r1.59.2.5 cfglayout.c
*** cfglayout.c 16 Jun 2004 17:14:21 -0000 1.59.2.5
--- cfglayout.c 21 Jun 2004 13:39:56 -0000
*************** fixup_reorder_chain (void)
*** 665,672 ****
{
/* If the old fallthru is still next, nothing to do. */
if (bb->rbi->next == e_fall->dest
! || (!bb->rbi->next
! && e_fall->dest == EXIT_BLOCK_PTR))
continue;
/* The degenerated case of conditional jump jumping to the next
--- 665,671 ----
{
/* If the old fallthru is still next, nothing to do. */
if (bb->rbi->next == e_fall->dest
! || e_fall->dest == EXIT_BLOCK_PTR)
continue;
/* The degenerated case of conditional jump jumping to the next