ifcvt.c (find_if_block): Allow join_bb as EXIT.
authorRichard Henderson <rth@redhat.com>
Wed, 22 Aug 2001 05:21:10 +0000 (22:21 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 22 Aug 2001 05:21:10 +0000 (22:21 -0700)
        * ifcvt.c (find_if_block): Allow join_bb as EXIT.
        (merge_if_block): Handle fallout from same.

From-SVN: r45093

gcc/ChangeLog
gcc/ifcvt.c

index dab28746f14cdc54000043dd34ec266198a6630a..55dfa7072b921e48951ccf4ec5bf60a5d3259122 100644 (file)
@@ -1,3 +1,8 @@
+2001-08-21  Richard Henderson  <rth@redhat.com>
+
+       * ifcvt.c (find_if_block): Allow join_bb as EXIT.
+       (merge_if_block): Handle fallout from same.
+
 2001-08-21  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * builtins.c (type_to_class): Fix typo in last change.
index a877a90da183bdb9494515afcd1db8931cff7f81..dc78672a54f74dbaf0a3af4f7d546a29ecd6ccfa 100644 (file)
@@ -1881,7 +1881,9 @@ merge_if_block (test_bb, then_bb, else_bb, join_bb)
      is more than one remaining edge, it must come from elsewhere.  There
      may be zero incoming edges if the THEN block didn't actually join 
      back up (as with a call to abort).  */
-  else if (join_bb->pred == NULL || join_bb->pred->pred_next == NULL)
+  else if ((join_bb->pred == NULL
+           || join_bb->pred->pred_next == NULL)
+          && join_bb != EXIT_BLOCK_PTR)
     {
       /* We can merge the JOIN.  */
       if (life_data_ok)
@@ -1901,7 +1903,8 @@ merge_if_block (test_bb, then_bb, else_bb, join_bb)
        abort ();
 
       /* Remove the jump and cruft from the end of the COMBO block.  */
-      tidy_fallthru_edge (combo_bb->succ, combo_bb, join_bb);
+      if (join_bb != EXIT_BLOCK_PTR)
+        tidy_fallthru_edge (combo_bb->succ, combo_bb, join_bb);
     }
 
   /* Make sure we update life info properly.  */
@@ -2067,7 +2070,7 @@ find_if_block (test_bb, then_edge, else_edge)
   next_index = then_bb->index;
   if (else_bb && ++next_index != else_bb->index)
     return FALSE;
-  if (++next_index != join_bb->index)
+  if (++next_index != join_bb->index && join_bb->index != EXIT_BLOCK)
     {
       if (else_bb)
        join_bb = NULL;