http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60520

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to H.J. Lu from comment #4)
> This change:
> 
> diff --git a/gcc/function.c b/gcc/function.c
> index a61e475..3b6718f 100644
> --- a/gcc/function.c
> +++ b/gcc/function.c
> @@ -6238,6 +6238,7 @@ thread_prologue_and_epilogue_insns (void)
>           }
>         /* Now duplicate the tails.  */
>         if (!bitmap_empty_p (&bb_tail))
> +         {
>           FOR_EACH_BB_REVERSE_FN (bb, cfun)
>             {
>               basic_block copy_bb, tbb;
> @@ -6304,6 +6305,17 @@ thread_prologue_and_epilogue_insns (void)
>               if (bitmap_empty_p (&bb_tail))
>                 break;
>             }
> +
> +         /* Basic blocks may have been changed.  Merge each basic block
> +            with its successor if possible.  */
> +         FOR_EACH_BB_FN (bb, cfun)
> +           if (single_succ_p (bb))
> +             {
> +               basic_block succ_bb = single_succ (bb);
> +               if (can_merge_blocks_p (bb, succ_bb))
> +                 merge_blocks (bb, succ_bb);
> +             }
> +         }
>       }
>  
>      fail_shrinkwrap:
> 
> seems to work.

We have cfg_cleanup for this, no?

Reply via email to