Alexandre Oliva <aol...@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