From 4dbebf6fc367d4730d252bb6b1c669d533c13b92 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 5 Jan 2017 01:46:32 +0000 Subject: [PATCH] [-fcompare-debug] find jump before debug insns in expand 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. for gcc/ChangeLog * cfgexpand.c (expand_gimple_basic_block): Disregard debug insns after final jump in test to emit dummy move. From-SVN: r244089 --- gcc/ChangeLog | 5 +++++ gcc/cfgexpand.c | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6f26a7a0e40..1031a436aa8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-01-04 Alexandre Oliva + + * cfgexpand.c (expand_gimple_basic_block): Disregard debug + insns after final jump in test to emit dummy move. + 2017-01-04 Alexandre Oliva * gimple-iterator.h (gsi_one_nondebug_before_end_p): New. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index ae063c1764f..66af69973c6 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); -- 2.30.2