diff options
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -1563,7 +1563,12 @@ delete_unreachable_blocks () check that the edge is not a FALLTHRU edge. */ if ((s = b->succ) != NULL && s->succ_next == NULL - && s->dest == c) + && s->dest == c + /* If the last insn is not a normal conditional jump + (or an unconditional jump), then we can not tidy the + fallthru edge because we can not delete the jump. */ + && GET_CODE (b->end) == JUMP_INSN + && condjump_p (b->end)) tidy_fallthru_edge (s, b, c); } @@ -1582,6 +1587,11 @@ delete_unreachable_blocks () && (s->flags & EDGE_EH) == 0 && (c = s->dest) != EXIT_BLOCK_PTR && c->pred->pred_next == NULL + /* If the last insn is not a normal conditional jump + (or an unconditional jump), then we can not merge + the blocks because we can not delete the jump. */ + && GET_CODE (b->end) == JUMP_INSN + && condjump_p (b->end) && merge_blocks (s, b, c)) continue; |