diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index f05cb6136c7..64279cc8c20 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -2148,6 +2148,20 @@ try_crossjump_to_edge (int mode, edge e1, edge e2, while (DEBUG_INSN_P (newpos1)) newpos1 = NEXT_INSN (newpos1); + /* And end of prologue marker. */ + if (NOTE_P (newpos1) && NOTE_KIND (newpos1) == NOTE_INSN_PROLOGUE_END) + newpos1 = NEXT_INSN (newpos1); + + while (DEBUG_INSN_P (newpos1)) + newpos1 = NEXT_INSN (newpos1); + + /* And also beginning of function marker. */ + if (NOTE_P (newpos1) && NOTE_KIND (newpos1) == NOTE_INSN_FUNCTION_BEG) + newpos1 = NEXT_INSN (newpos1); + + while (DEBUG_INSN_P (newpos1)) + newpos1 = NEXT_INSN (newpos1); + redirect_from = split_block (src1, PREV_INSN (newpos1))->src; to_remove = single_succ (redirect_from);