From 276916011ac1f194c1952e5225d1a51f069c8b50 Mon Sep 17 00:00:00 2001 From: Jeffrey A Law Date: Wed, 4 Aug 1999 07:09:48 +0000 Subject: [PATCH] flow.c (delete_unreachable_blocks): Do not call merge_blocks or tidy_fallthru_edge if... * flow.c (delete_unreachable_blocks): Do not call merge_blocks or tidy_fallthru_edge if the last insn in the block is not an unconditional jump or a simple conditional jump. From-SVN: r28482 --- gcc/ChangeLog | 6 ++++++ gcc/flow.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c13d9fe91bfb..88032f8623ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Wed Aug 4 01:08:44 1999 Jeffrey A Law (law@cygnus.com) + + * flow.c (delete_unreachable_blocks): Do not call merge_blocks + or tidy_fallthru_edge if the last insn in the block is not + an unconditional jump or a simple conditional jump. + Tue Aug 3 03:51:20 1999 Jeffrey A Law (law@cygnus.com) * cse.c (cse_insn): Fix dumb thinko in last change. diff --git a/gcc/flow.c b/gcc/flow.c index edcee2919ad7..ac8fd6337ff2 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -1562,7 +1562,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); } @@ -1581,6 +1586,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; -- 2.47.2