This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix ICE from path isolation (PR tree-optimization/84960)
- From: Richard Biener <rguenther at suse dot de>
- To: Jakub Jelinek <jakub at redhat dot com>,Jeff Law <law at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Wed, 21 Mar 2018 21:42:26 +0100
- Subject: Re: [PATCH] Fix ICE from path isolation (PR tree-optimization/84960)
- References: <20180321202406.GN8577@tucnak>
On March 21, 2018 9:24:06 PM GMT+01:00, Jakub Jelinek <jakub@redhat.com> wrote:
>Hi!
>
>On the following testcase, path isolation decides to duplicate a bb and
>redirect edge from ENTRY bb to its successor to this duplicate bb and
>tree cleanup then removes all other basic blocks as unreachable.
>
>When blocks are removed, forced labels are moved to their bb->prev_bb
>block,
>but inserting any stmts into the ENTRY bb is of course invalid.
>
>This patch makes sure we insert it into the ENTRY successor instead in
>that
>case. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for
>trunk?
OK.
Richard.
>2018-03-21 Jakub Jelinek <jakub@redhat.com>
>
> PR tree-optimization/84960
> * tree-cfg.c (remove_bb): Don't move forced labels into bb->prev_bb
> if it is ENTRY block, move them into single succ of ENTRY in that
>case.
>
> * gcc.c-torture/compile/pr84960.c: New test.
>
>--- gcc/tree-cfg.c.jj 2018-02-09 06:44:38.445804410 +0100
>+++ gcc/tree-cfg.c 2018-03-21 12:43:57.835337795 +0100
>@@ -2301,6 +2301,12 @@ remove_bb (basic_block bb)
> }
>
> new_bb = bb->prev_bb;
>+ /* Don't move any labels into ENTRY block. */
>+ if (new_bb == ENTRY_BLOCK_PTR_FOR_FN (cfun))
>+ {
>+ new_bb = single_succ (new_bb);
>+ gcc_assert (new_bb != bb);
>+ }
> new_gsi = gsi_start_bb (new_bb);
> gsi_remove (&i, false);
> gsi_insert_before (&new_gsi, stmt, GSI_NEW_STMT);
>--- gcc/testsuite/gcc.c-torture/compile/pr84960.c.jj 2018-03-21
>12:49:15.299278319 +0100
>+++ gcc/testsuite/gcc.c-torture/compile/pr84960.c 2018-03-21
>12:49:04.245280389 +0100
>@@ -0,0 +1,17 @@
>+/* PR tree-optimization/84960 */
>+/* { dg-do compile { target indirect_jumps } } */
>+
>+void
>+foo (unsigned int a, float b, void *c)
>+{
>+lab:
>+ if ((b - (a %= 0) < 1U) * -1U)
>+ ;
>+ else
>+ {
>+ unsigned int f = a;
>+ __builtin_unreachable ();
>+ c = &&lab;
>+ }
>+ goto *c;
>+}
>
> Jakub