aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-08-21 22:21:10 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-08-21 22:21:10 -0700
commitb64d061e8060c5625d55d9f20aa3581c05b3cde3 (patch)
tree52b47aa01a9ec67a95b7c255f3990bda897b57d3 /gcc
parent91db4a92c6c22c25265d07fd97be83154a3c47da (diff)
downloadgcc-b64d061e8060c5625d55d9f20aa3581c05b3cde3.zip
gcc-b64d061e8060c5625d55d9f20aa3581c05b3cde3.tar.gz
gcc-b64d061e8060c5625d55d9f20aa3581c05b3cde3.tar.bz2
ifcvt.c (find_if_block): Allow join_bb as EXIT.
* ifcvt.c (find_if_block): Allow join_bb as EXIT. (merge_if_block): Handle fallout from same. From-SVN: r45093
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/ifcvt.c9
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dab2874..55dfa70 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index a877a90..dc78672 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -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;