cfgrtl.c (cfg_layout_redirect_edge_and_branch): Speed up by simplifying edge manipula...
authorKazu Hirata <kazu@cs.umass.edu>
Mon, 29 Nov 2004 17:56:19 +0000 (17:56 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Mon, 29 Nov 2004 17:56:19 +0000 (17:56 +0000)
* cfgrtl.c (cfg_layout_redirect_edge_and_branch): Speed up by
simplifying edge manipulation.

From-SVN: r91474

gcc/ChangeLog
gcc/cfgrtl.c

index 5b56064..4f6a58d 100644 (file)
@@ -6,6 +6,9 @@
        * tree-ssa-loop-manip.c: Likewise.
        * tree-ssa.c: Likewise.
 
+       * cfgrtl.c (cfg_layout_redirect_edge_and_branch): Speed up by
+       simplifying edge manipulation.
+
 2004-11-29  Alan Modra  <amodra@bigpond.net.au>
 
        * varasm.c (default_elf_select_section_1): Only pass DECL_P decl
index 3ba3265..818c5b8 100644 (file)
@@ -2587,25 +2587,8 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
          of conditional jump, remove it.  */
       if (EDGE_COUNT (src->succs) == 2)
        {
-         bool found = false;
-         unsigned ix = 0;
-         edge tmp, s;
-         edge_iterator ei;
-
-         FOR_EACH_EDGE (tmp, ei, src->succs)
-           if (e == tmp)
-             {
-               found = true;
-               ix = ei.index;
-               break;
-             }
-
-         gcc_assert (found);
-
-         if (EDGE_COUNT (src->succs) > (ix + 1))
-           s = EDGE_SUCC (src, ix + 1);
-         else
-           s = EDGE_SUCC (src, 0);
+         /* Find the edge that is different from E.  */
+         edge s = EDGE_SUCC (src, EDGE_SUCC (src, 0) == e);
 
          if (s->dest == dest
              && any_condjump_p (BB_END (src))