[-fcompare-debug] find jump before debug insns in expand
authorAlexandre Oliva <aoliva@redhat.com>
Thu, 5 Jan 2017 01:46:32 +0000 (01:46 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Thu, 5 Jan 2017 01:46:32 +0000 (01:46 +0000)
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
gcc/cfgexpand.c

index 6f26a7a0e40c43b34e07076a81c44cd38795c3ce..1031a436aa8bee031e7b581f8b74adf2c4298de3 100644 (file)
@@ -1,3 +1,8 @@
+2017-01-04  Alexandre Oliva <aoliva@redhat.com>
+
+       * cfgexpand.c (expand_gimple_basic_block): Disregard debug
+       insns after final jump in test to emit dummy move.
+
 2017-01-04  Alexandre Oliva <aoliva@redhat.com>
 
        * gimple-iterator.h (gsi_one_nondebug_before_end_p): New.
index ae063c1764fabc9e33b3ada85a39deb86d79369e..66af69973c698088a7d1bc3ca11274386cb446f6 100644 (file)
@@ -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);