re PR rtl-optimization/57662 (ICE: SIGSEGV in code_motion_process_successors with...
authorAndrey Belevantsev <abel@ispras.ru>
Mon, 3 Feb 2014 12:00:23 +0000 (16:00 +0400)
committerAndrey Belevantsev <abel@gcc.gnu.org>
Mon, 3 Feb 2014 12:00:23 +0000 (16:00 +0400)
gcc/
PR rtl-optimization/57662
* sel-sched.c (code_motion_path_driver): Do not mark already not
existing blocks in the visiting bitmap.

testsuite/
PR rtl-optimization/57662
* g++.dg/pr57662.C: New test.

From-SVN: r207421

gcc/ChangeLog
gcc/sel-sched.c
gcc/testsuite/ChangeLog

index 13333db..5be3db5 100644 (file)
@@ -1,5 +1,11 @@
 2014-02-03  Andrey Belevantsev  <abel@ispras.ru>
 
+       PR rtl-optimization/57662
+       * sel-sched.c (code_motion_path_driver): Do not mark already not
+       existing blocks in the visiting bitmap.
+
+2014-02-03  Andrey Belevantsev  <abel@ispras.ru>
+
        * sel-sched-ir.c (sel_gen_insn_from_expr_after): Reset INSN_DELETED_P
        on the insn being emitted.
 
index ad4a0aa..d3d73b2 100644 (file)
@@ -6741,7 +6741,11 @@ code_motion_path_driver (insn_t insn, av_set_t orig_ops, ilist_t path,
      the numbering by creating bookkeeping blocks.  */
   if (removed_last_insn)
     insn = PREV_INSN (insn);
-  bitmap_set_bit (code_motion_visited_blocks, BLOCK_FOR_INSN (insn)->index);
+
+  /* If we have simplified the control flow and removed the first jump insn,
+     there's no point in marking this block in the visited blocks bitmap.  */
+  if (BLOCK_FOR_INSN (insn))
+    bitmap_set_bit (code_motion_visited_blocks, BLOCK_FOR_INSN (insn)->index);
   return true;
 }
 
index 4d1f356..4f718dd 100644 (file)
@@ -1,3 +1,8 @@
+2014-02-03  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/57662
+       * g++.dg/pr57662.C: New test.
+
 2014-02-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * gcc.dg/vmx/3b-15.c: Remove special handling for little endian.