OSDN Git Service

* bitmap.c (bitmap_find_bit): Speed up by traversing from
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Nov 2004 07:07:00 +0000 (07:07 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Nov 2004 07:07:00 +0000 (07:07 +0000)
head->first if that seems profitable.

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

gcc/ChangeLog
gcc/bitmap.c

index 6ed2371..af30976 100644 (file)
@@ -3,6 +3,9 @@
        * cfgrtl.c (try_redirect_by_replacing_jump): Speed up the
        check that tests if all edges go to the same destination.
 
+       * bitmap.c (bitmap_find_bit): Speed up by traversing from
+       head->first if that seems profitable.
+
 2004-11-25  Jeff Law  <law@redhat.com>
 
        * timevar.def (TV_TREE_LOOP_INIT, TV_TREE_LOOP_FINI): New timevars.
index f633505..140dd00 100644 (file)
@@ -401,14 +401,26 @@ bitmap_find_bit (bitmap head, unsigned int bit)
       || head->indx == indx)
     return head->current;
 
-  if (head->indx > indx)
+  if (head->indx < indx)
+    /* INDX is beyond head->indx.  Search from head->current
+       forward.  */
+    for (element = head->current;
+        element->next != 0 && element->indx < indx;
+        element = element->next)
+      ;
+
+  else if (head->indx / 2 < indx)
+    /* INDX is less than head->indx and closer to head->indx than to
+       0.  Search from head->current backward.  */
     for (element = head->current;
         element->prev != 0 && element->indx > indx;
         element = element->prev)
       ;
 
   else
-    for (element = head->current;
+    /* INDX is less than head->indx and closer to 0 than to
+       head->indx.  Search from head->first forward.  */
+    for (element = head->first;
         element->next != 0 && element->indx < indx;
         element = element->next)
       ;