On Fri, May 17, 2013 at 03:59:07PM -0600, Jeff Law wrote:
> On 05/17/2013 03:53 PM, Steven Bosscher wrote:
> >On Fri, May 17, 2013 at 11:16 PM, Jeff Law wrote:
> >>>What's happened, is that emitting the epilogue at the end of basic
> >>>block 4 (with a barrier at the end) has made the use insn 43
> >>>unreachable.
> >>
> >>But from the description you've given, it appears that the epilogue itself
> >>has unreachable code, and that shouldn't be happening.  If you think it can
> >>happen by way of shrink-wrapping, I'd like to see the analysis.
> >
> >It is not the epilogue itself but the way shrink-wrapping emits it.
> >The block that is unreachable has its last predecessor edge removed in
> >function.c:6607:
> >
> >6607              redirect_edge_and_branch_force (e, *pdest_bb);
> >
> >I haven't looked at how the shrink-wrapping code works exactly. It's
> >Bernd's code, so perhaps he can have a look. This is now PR57320.
> OK.  Let's go with your patch then.  Approved with a comment that
> shrink-wrapping can result in unreachable edges in the epilogue.

I have bootstrapped/regtested Steven's patch now and committed to trunk:

2014-03-13  Steven Bosscher  <ste...@gcc.gnu.org>

        PR rtl-optimization/57320
        * function.c (rest_of_handle_thread_prologue_and_epilogue): Cleanup
        the CFG after thread_prologue_and_epilogue_insns.

--- gcc/function.c.jj   2014-03-03 08:25:17.000000000 +0100
+++ gcc/function.c      2014-03-13 15:42:30.534922406 +0100
@@ -6991,6 +6991,10 @@ rest_of_handle_thread_prologue_and_epilo
      scheduling to operate in the epilogue.  */
   thread_prologue_and_epilogue_insns ();
 
+  /* Shrink-wrapping can result in unreachable edges in the epilogue,
+     see PR57320.  */
+  cleanup_cfg (0);
+
   /* The stack usage info is finalized during prologue expansion.  */
   if (flag_stack_usage_info)
     output_stack_usage ();


        Jakub

Reply via email to