On Tue, Jan 3, 2017 at 6:28 AM, Alexandre Oliva <[email protected]> wrote:
> A debug insn after the final jump of a basic block may cause the
> expander to emit a dummy move where the non-debug compile won't
> because it finds the jump insn at the end of the insn stream.
>
> Fix the condition so that, instead of requiring the jump as the last
> insn, it also matches a jump followed by debug insns.
>
> This fixes the compilation of libgcc/libgcov-profiler.c with
> -fcompare-debug on i686-linux-gnu.
>
> Regstrapped on x86_64-linux-gnu and i686-linux-gnu. Ok to install?
Ok.
RIchard.
> for gcc/ChangeLog
>
> * cfgexpand.c (expand_gimple_basic_block): Disregard debug
> insns after final jump in test to emit dummy move.
> ---
> gcc/cfgexpand.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
> index 97dc648..76bb614 100644
> --- a/gcc/cfgexpand.c
> +++ b/gcc/cfgexpand.c
> @@ -5767,7 +5767,9 @@ expand_gimple_basic_block (basic_block bb, bool
> disable_tail_calls)
> if (single_succ_p (bb)
> && (single_succ_edge (bb)->flags & EDGE_FALLTHRU)
> && (last = get_last_insn ())
> - && JUMP_P (last))
> + && (JUMP_P (last)
> + || (DEBUG_INSN_P (last)
> + && JUMP_P (prev_nondebug_insn (last)))))
> {
> rtx dummy = gen_reg_rtx (SImode);
> emit_insn_after_noloc (gen_move_insn (dummy, dummy), last, NULL);
>
>
> --
> Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/
> You must be the change you wish to see in the world. -- Gandhi
> Be Free! -- http://FSFLA.org/ FSF Latin America board member
> Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer