aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>1999-08-07 11:36:15 -0700
committerRichard Henderson <rth@gcc.gnu.org>1999-08-07 11:36:15 -0700
commitd0e8071928aaf219e9cd98aa0daaacab77d1059f (patch)
treeb557a9b19a9ed1f213210bf2c9904a6e1079c631 /gcc/flow.c
parent021d1677821665d83eee8026b244465087169435 (diff)
downloadgcc-d0e8071928aaf219e9cd98aa0daaacab77d1059f.zip
gcc-d0e8071928aaf219e9cd98aa0daaacab77d1059f.tar.gz
gcc-d0e8071928aaf219e9cd98aa0daaacab77d1059f.tar.bz2
jump.c (onlyjump_p): New function.
* jump.c (onlyjump_p): New function. * rtl.h: Declare it. * flow.c (delete_unreachable_blocks): Use onlyjump_p instead of condjump_p in calling tidy_fallthru_edge and merge_blocks. From-SVN: r28584
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 9ca8f5c..0fbe551 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -1564,11 +1564,9 @@ delete_unreachable_blocks ()
if ((s = b->succ) != NULL
&& s->succ_next == NULL
&& 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))
+ /* If the jump insn has side effects, we can't tidy the edge. */
+ && (GET_CODE (b->end) != JUMP_INSN
+ || onlyjump_p (b->end)))
tidy_fallthru_edge (s, b, c);
}
@@ -1587,11 +1585,9 @@ 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)
+ /* If the jump insn has side effects, we can't kill the edge. */
+ && (GET_CODE (b->end) != JUMP_INSN
+ || onlyjump_p (b->end))
&& merge_blocks (s, b, c))
continue;