Fix for g++ failure reported by Brendan.
authorJim Wilson <wilson@cygnus.com>
Mon, 21 Sep 1998 13:59:47 +0000 (13:59 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Mon, 21 Sep 1998 13:59:47 +0000 (06:59 -0700)
* flow.c (find_basic_blocks): Delete check for in_libcall_block when
prev_code is a CALL_INSN.  Change check for REG_RETVAL note to
use in_libcall_block.
(find_basic_blocks_1): Delete check for in_libcall_block when prev_code
is a CALL_INSN.  If CALL_INSN and in_libcall_block, then change code
to INSN.

From-SVN: r22529

gcc/ChangeLog
gcc/flow.c

index 8a61c4a..f383cd3 100644 (file)
@@ -1,3 +1,12 @@
+Mon Sep 21 13:51:05 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * flow.c (find_basic_blocks): Delete check for in_libcall_block when
+       prev_code is a CALL_INSN.  Change check for REG_RETVAL note to
+       use in_libcall_block.
+       (find_basic_blocks_1): Delete check for in_libcall_block when prev_code
+       is a CALL_INSN.  If CALL_INSN and in_libcall_block, then change code
+       to INSN.
+
 Mon Sep 21 14:02:23 1998
 
        * i386.h: (TARGET_SWITCHES) Improve doc for align-double.  Fix
index fb309be..e939d19 100644 (file)
@@ -331,12 +331,13 @@ find_basic_blocks (f, nregs, file, live_reachable_p)
            || (GET_RTX_CLASS (code) == 'i'
                && (prev_code == JUMP_INSN
                    || (prev_code == CALL_INSN
-                       && (nonlocal_label_list != 0 || eh_region)
-                       && ! in_libcall_block)
+                       && (nonlocal_label_list != 0 || eh_region))
                    || prev_code == BARRIER)))
          i++;
 
-       if (code == CALL_INSN && find_reg_note (insn, REG_RETVAL, NULL_RTX))
+       /* We change the code of the CALL_INSN, so that it won't start a
+          new block.  */
+       if (code == CALL_INSN && in_libcall_block)
          code = INSN;
 
        if (code != NOTE)
@@ -456,8 +457,7 @@ find_basic_blocks_1 (f, nonlocal_label_list, live_reachable_p)
               || (GET_RTX_CLASS (code) == 'i'
                   && (prev_code == JUMP_INSN
                       || (prev_code == CALL_INSN
-                          && (nonlocal_label_list != 0 || eh_note)
-                          && ! in_libcall_block)
+                          && (nonlocal_label_list != 0 || eh_note))
                       || prev_code == BARRIER)))
        {
          basic_block_head[++i] = insn;
@@ -519,6 +519,11 @@ find_basic_blocks_1 (f, nonlocal_label_list, live_reachable_p)
                                         NOTE_BLOCK_NUMBER (XEXP (eh_note, 0));
       BLOCK_NUM (insn) = i;
 
+      /* We change the code of the CALL_INSN, so that it won't start a
+        new block.  */
+      if (code == CALL_INSN && in_libcall_block)
+       code = INSN;
+
       if (code != NOTE)
        prev_code = code;