This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [-fcompare-debug] find jump before debug insns in expand
- From: Richard Sandiford <rdsandiford at googlemail dot com>
- To: Alexandre Oliva <aoliva at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 03 Jan 2017 14:08:38 +0000
- Subject: Re: [-fcompare-debug] find jump before debug insns in expand
- Authentication-results: sourceware.org; auth=none
- References: <orzij83e6b.fsf@lxoliva.fsfla.org>
Alexandre Oliva <aoliva@redhat.com> writes:
> 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?
>
> 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)))))
Would it be worth adding a get_last_nondebug_insn in case other patterns
like this crop up?
Thanks,
Richard