https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81766

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
If contemplating reversion, perhaps:
--- gcc/function.c.jj   2017-08-07 18:50:09.000000000 +0200
+++ gcc/function.c      2017-08-08 11:11:25.506239318 +0200
@@ -6073,17 +6073,16 @@ thread_prologue_and_epilogue_insns (void
       if (prologue_insn
          && BLOCK_FOR_INSN (prologue_insn) == NULL)
        prologue_insn = NULL;
-      if (split_prologue_insn || prologue_insn)
-       {
-         auto_sbitmap blocks (last_basic_block_for_fn (cfun));
-         bitmap_clear (blocks);
-         if (split_prologue_insn)
-           bitmap_set_bit (blocks,
-                           BLOCK_FOR_INSN (split_prologue_insn)->index);
-         if (prologue_insn)
-           bitmap_set_bit (blocks, BLOCK_FOR_INSN (prologue_insn)->index);
-         find_many_sub_basic_blocks (blocks);
-       }
+      auto_sbitmap blocks (last_basic_block_for_fn (cfun));
+      bitmap_clear (blocks);
+      if (split_prologue_insn)
+       bitmap_set_bit (blocks,
+                       BLOCK_FOR_INSN (split_prologue_insn)->index);
+      if (prologue_insn)
+       bitmap_set_bit (blocks, BLOCK_FOR_INSN (prologue_insn)->index);
+      bitmap_set_bit (blocks, entry_edge->dest->index);
+      bitmap_set_bit (blocks, orig_entry_edge->dest->index);
+      find_many_sub_basic_blocks (blocks);
     }

   default_rtl_profile ();

should be safe too (which does what we used to do before and additionally marks
the new blocks if needed and different from the old ones.
Can't test it right now though.  And, I really need to debug why we need to
find_many_sub_basic_blocks when split_prologue_seq is NULL and prologue_seq is
just
(note 17 0 0 NOTE_INSN_PROLOGUE_END)
alone.  Perhaps something inserts insns elsewhere.

Reply via email to