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.