]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
flow.c (delete_unreachable_blocks): Do not call merge_blocks or tidy_fallthru_edge...
authorJeffrey A Law <law@cygnus.com>
Wed, 4 Aug 1999 07:11:26 +0000 (07:11 +0000)
committerJeff Law <law@gcc.gnu.org>
Wed, 4 Aug 1999 07:11:26 +0000 (01:11 -0600)
        * 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: r28483

gcc/ChangeLog
gcc/flow.c

index ad53adfe20d94c8c28a62491dfc5e6cef03e935c..37afbd6c0e96c7d5f18b4e138e2e6578293d62cc 100644 (file)
@@ -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 20:21:20 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * Makefile.in (c-decl.o): Depends on defaults.h.
index 7ec0832f0c67ea43435c999fc1e703c36b2d783c..9ca8f5c88fb053a2da4a73c836e092f17f585168 100644 (file)
@@ -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;