diff options
author | kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-26 07:07:00 +0000 |
---|---|---|
committer | kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-26 07:07:00 +0000 |
commit | 4afe554415ebc926b6e6bb61a8ba6a6efb693f45 (patch) | |
tree | 70570fb44f35a4e72fc9fc581481500db1e54681 /gcc/bitmap.c | |
parent | 34f05bfaa65c6c9e7fd41715a5a20318f6c4bce3 (diff) | |
download | gcc-4afe554415ebc926b6e6bb61a8ba6a6efb693f45.tar.gz |
* bitmap.c (bitmap_find_bit): Speed up by traversing from
head->first if that seems profitable.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91335 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/bitmap.c')
-rw-r--r-- | gcc/bitmap.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/bitmap.c b/gcc/bitmap.c index f633505eeba..140dd007e79 100644 --- a/gcc/bitmap.c +++ b/gcc/bitmap.c @@ -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) ; |