OSDN Git Service

* tree-cfg.c (tree_try_redirect_by_replacing_jump): Speed up
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Nov 2004 19:34:35 +0000 (19:34 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Nov 2004 19:34:35 +0000 (19:34 +0000)
by restricting to the case with two outgoing edges.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91098 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-cfg.c

index 2fa744f..f809b27 100644 (file)
@@ -15,6 +15,9 @@
        * tree.h (PHI_ARG_EDGE): Redefine in terms of EDGE_PRED.
        (phi_arg_d): Remove e.
 
+       * tree-cfg.c (tree_try_redirect_by_replacing_jump): Speed up
+       by restricting to the case with two outgoing edges.
+
 2004-11-23  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * config/s390/s390.c (s390_backchain_string): Removed.
index 1f934cb..b59c8f7 100644 (file)
@@ -4247,17 +4247,15 @@ static edge
 tree_try_redirect_by_replacing_jump (edge e, basic_block target)
 {
   basic_block src = e->src;
-  edge tmp;
   block_stmt_iterator b;
   tree stmt;
-  edge_iterator ei;
-
-  /* Verify that all targets will be TARGET.  */
-  FOR_EACH_EDGE (tmp, ei, src->succs)
-    if (tmp->dest != target && tmp != e)
-      break;
 
-  if (tmp)
+  /* We can replace or remove a complex jump only when we have exactly
+     two edges.  */
+  if (EDGE_COUNT (src->succs) != 2
+      /* Verify that all targets will be TARGET.  Specifically, the
+        edge that is not E must also go to TARGET.  */
+      || EDGE_SUCC (src, EDGE_SUCC (src, 0) == e)->dest != target)
     return NULL;
 
   b = bsi_last (src);