OSDN Git Service

* cfgrtl.c (commit_edge_insertions): Call
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Feb 2003 22:14:23 +0000 (22:14 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Feb 2003 22:14:23 +0000 (22:14 +0000)
find_many_sub_basic_block only when some code has been emitted.
(commit_edge_insertions_watch_calls): Bring into sync with
commit_edge_insertions

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

gcc/ChangeLog
gcc/cfgrtl.c

index a0cc8be..cc10d78 100644 (file)
@@ -1,3 +1,10 @@
+Fri Feb 21 23:10:13 CET 2003  Jan Hubicka  <jh@suse.cz>
+
+       * cfgrtl.c (commit_edge_insertions):  Call
+       find_many_sub_basic_block only when some code has been emitted.
+       (commit_edge_insertions_watch_calls): Bring into sync with
+       commit_edge_insertions
+
 Fri Feb 21 20:41:29 2003  J"orn Rennecke <joern.rennecke@superh.com>
 
        * sh.h (OVERRIDE_OPTIONS): Fix code that clears 'e' register class.
index 6d3be7e..77290a9 100644 (file)
@@ -1460,6 +1460,7 @@ commit_edge_insertions ()
 {
   basic_block bb;
   sbitmap blocks;
+  bool changed = false;
 
 #ifdef ENABLE_CHECKING
   verify_flow_info ();
@@ -1473,10 +1474,16 @@ commit_edge_insertions ()
        {
          next = e->succ_next;
          if (e->insns)
-           commit_one_edge_insertion (e, false);
+           {
+              changed = true;
+              commit_one_edge_insertion (e, false);
+           }
        }
     }
 
+  if (!changed)
+    return;
+
   blocks = sbitmap_alloc (last_basic_block);
   sbitmap_zero (blocks);
   FOR_EACH_BB (bb)
@@ -1500,6 +1507,8 @@ void
 commit_edge_insertions_watch_calls ()
 {
   basic_block bb;
+  sbitmap blocks;
+  bool changed = false;
 
 #ifdef ENABLE_CHECKING
   verify_flow_info ();
@@ -1513,9 +1522,30 @@ commit_edge_insertions_watch_calls ()
        {
          next = e->succ_next;
          if (e->insns)
-           commit_one_edge_insertion (e, true);
+           {
+             changed = true;
+             commit_one_edge_insertion (e, true);
+           }
        }
     }
+
+  if (!changed)
+    return;
+
+  blocks = sbitmap_alloc (last_basic_block);
+  sbitmap_zero (blocks);
+  FOR_EACH_BB (bb)
+    if (bb->aux)
+      {
+        SET_BIT (blocks, bb->index);
+       /* Check for forgotten bb->aux values before commit_edge_insertions
+          call.  */
+       if (bb->aux != &bb->aux)
+         abort ();
+       bb->aux = NULL;
+      }
+  find_many_sub_basic_blocks (blocks);
+  sbitmap_free (blocks);
 }
 \f
 /* Print out one basic block with live information at start and end.  */