OSDN Git Service

* cfg.c (unchecked_make_edge): New.
authormatz <matz@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 10 Mar 2003 12:59:12 +0000 (12:59 +0000)
committermatz <matz@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 10 Mar 2003 12:59:12 +0000 (12:59 +0000)
        (cached_make_edge): Use it.
        * basic-block.h (unchecked_make_edge): Declare.
        * cfglayout.c (cfg_layout_duplicate_bb): Use it.

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

gcc/ChangeLog
gcc/basic-block.h
gcc/cfg.c
gcc/cfglayout.c

index 202ded1..2125c09 100644 (file)
@@ -1,3 +1,10 @@
+2003-03-10  Michael Matz  <matz@suse.de>
+
+       * cfg.c (unchecked_make_edge): New.
+       (cached_make_edge): Use it.
+       * basic-block.h (unchecked_make_edge): Declare.
+       * cfglayout.c (cfg_layout_duplicate_bb): Use it.
+
 2003-03-10  Richard Earnshaw  <rearnsha@arm.com>
 
        * fpa.md: New file.  Move all patterns relating to FPA co-processor
index e62419f..fce7de5 100644 (file)
@@ -345,6 +345,8 @@ extern void remove_fake_edges               PARAMS ((void));
 extern void add_noreturn_fake_exit_edges       PARAMS ((void));
 extern void connect_infinite_loops_to_exit     PARAMS ((void));
 extern int flow_call_edges_add         PARAMS ((sbitmap));
+extern edge unchecked_make_edge                PARAMS ((basic_block,
+                                                basic_block, int));
 extern edge cached_make_edge           PARAMS ((sbitmap *, basic_block,
                                                 basic_block, int));
 extern edge make_edge                  PARAMS ((basic_block,
index de7a212..fe40007 100644 (file)
--- a/gcc/cfg.c
+++ b/gcc/cfg.c
@@ -280,6 +280,32 @@ expunge_block (b)
   pool_free (bb_pool, b);
 }
 \f
+/* Create an edge connecting SRC and DEST with flags FLAGS.  Return newly
+   created edge.  Use this only if you are sure that this edge can't
+   possibly already exist.  */
+
+edge
+unchecked_make_edge (src, dst, flags)
+     basic_block src, dst;
+     int flags;
+{
+  edge e;
+  e = pool_alloc (edge_pool);
+  memset (e, 0, sizeof (*e));
+  n_edges++;
+
+  e->succ_next = src->succ;
+  e->pred_next = dst->pred;
+  e->src = src;
+  e->dest = dst;
+  e->flags = flags;
+
+  src->succ = e;
+  dst->pred = e;
+
+  return e;
+}
+
 /* Create an edge connecting SRC and DST with FLAGS optionally using
    edge cache CACHE.  Return the new edge, NULL if already exist.  */
 
@@ -320,19 +346,7 @@ cached_make_edge (edge_cache, src, dst, flags)
       break;
     }
   
-  
-  e = pool_alloc (edge_pool);
-  memset (e, 0, sizeof (*e));
-  n_edges++;
-
-  e->succ_next = src->succ;
-  e->pred_next = dst->pred;
-  e->src = src;
-  e->dest = dst;
-  e->flags = flags;
-
-  src->succ = e;
-  dst->pred = e;
+  e = unchecked_make_edge (src, dst, flags);
 
   if (use_edge_cache)
     SET_BIT (edge_cache[src->index], dst->index);
index 04ba2ec..1f4f8fc 100644 (file)
@@ -980,7 +980,10 @@ cfg_layout_duplicate_bb (bb, e)
   new_bb->flags = bb->flags;
   for (s = bb->succ; s; s = s->succ_next)
     {
-      n = make_edge (new_bb, s->dest, s->flags);
+      /* Since we are creating edges from a new block to successors
+        of another block (which therefore are known to be disjoint), there
+        is no need to actually check for duplicated edges.  */
+      n = unchecked_make_edge (new_bb, s->dest, s->flags);
       n->probability = s->probability;
       if (new_count)
        /* Take care for overflows!  */