(cse_basic_block): Fix test for whether block ends with a barrier.
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 9 Jun 1995 22:05:54 +0000 (18:05 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 9 Jun 1995 22:05:54 +0000 (18:05 -0400)
Return next insn, not 0, if block ends in a barrier.

From-SVN: r9916

gcc/cse.c

index 9b3aa2ea342fa1acaa2db513bb6601e60dcd96ad..7f610cea7c5556f67b1fe923cadb724319280a6c 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -8429,22 +8429,25 @@ cse_basic_block (from, to, next_branch, around_loop)
          && GET_CODE (to) == CODE_LABEL && --LABEL_NUSES (to) == to_usage)
        {
          struct cse_basic_block_data val;
+         rtx prev;
 
          insn = NEXT_INSN (to);
 
          if (LABEL_NUSES (to) == 0)
-           delete_insn (to);
+           insn = delete_insn (to);
 
-         /* Find the end of the following block.  Note that we won't be
-            following branches in this case.  If TO was the last insn
-            in the function, we are done.  Similarly, if we deleted the
-            insn after TO, it must have been because it was preceded by
-            a BARRIER.  In that case, we are done with this block because it
-            has no continuation.  */
-
-         if (insn == 0 || INSN_DELETED_P (insn))
+         /* If TO was the last insn in the function, we are done.  */
+         if (insn == 0)
            return 0;
 
+         /* If TO was preceded by a BARRIER we are done with this block
+            because it has no continuation.  */
+         prev = prev_nonnote_insn (to);
+         if (prev && GET_CODE (prev) == BARRIER)
+           return insn;
+
+         /* Find the end of the following block.  Note that we won't be
+            following branches in this case.  */
          to_usage = 0;
          val.path_size = 0;
          cse_end_of_basic_block (insn, &val, 0, 0, 0);