This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [-fcompare-debug] find jump before debug insns in expand


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]