diff options
author | zadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-04-21 20:15:38 +0000 |
---|---|---|
committer | zadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-04-21 20:15:38 +0000 |
commit | 349621f075f6bdfb362a743f4f4d47e0bb53c7c0 (patch) | |
tree | 60a502b3646568411cd11bb0bfb90478e6ddf309 /gcc | |
parent | 3f2bf473a03c1e247fb9b0d41223170187c6d13b (diff) | |
download | gcc-349621f075f6bdfb362a743f4f4d47e0bb53c7c0.tar.gz |
2008-04-24 Kenneth Zadeck <zadeck@naturalbridge.com>
* sbitmap.c (sbitmap_range_empty_p): New function.
* sbitmap.h (sbitmap_range_empty_p): New function.
* bitmap.h: Now includes obstack.h.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134529 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/bitmap.h | 1 | ||||
-rw-r--r-- | gcc/sbitmap.c | 53 | ||||
-rw-r--r-- | gcc/sbitmap.h | 3 |
4 files changed, 61 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ed1c788617f..8b6363a613f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-04-24 Kenneth Zadeck <zadeck@naturalbridge.com> + * sbitmap.c (sbitmap_range_empty_p): New function. + * sbitmap.h (sbitmap_range_empty_p): New function. + * bitmap.h: Now includes obstack.h. + + 2008-04-24 Richard Sandiford <rsandifo@nildram.co.uk> Kenneth Zadeck <zadeck@naturalbridge.com> diff --git a/gcc/bitmap.h b/gcc/bitmap.h index 0b6ed731922..2a3b0b4baf8 100644 --- a/gcc/bitmap.h +++ b/gcc/bitmap.h @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see #define GCC_BITMAP_H #include "hashtab.h" #include "statistics.h" +#include "obstack.h" /* Fundamental storage type for bitmap. */ diff --git a/gcc/sbitmap.c b/gcc/sbitmap.c index d8b8d6c1ff5..cab4ec0e0ed 100644 --- a/gcc/sbitmap.c +++ b/gcc/sbitmap.c @@ -1,5 +1,5 @@ /* Simple bitmaps. - Copyright (C) 1999, 2000, 2002, 2003, 2004, 2006, 2007 + Copyright (C) 1999, 2000, 2002, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GCC. @@ -273,6 +273,57 @@ sbitmap_empty_p (const_sbitmap bmap) return true; } +/* Return false if any of the N bits are set in MAP starting at + START. */ + +bool +sbitmap_range_empty_p (const_sbitmap bmap, unsigned int start, unsigned int n) +{ + unsigned int i = start / SBITMAP_ELT_BITS; + SBITMAP_ELT_TYPE elm; + unsigned int shift = start % SBITMAP_ELT_BITS; + + gcc_assert (bmap->n_bits >= start + n); + + elm = bmap->elms[i]; + elm = elm >> shift; + + if (shift + n <= SBITMAP_ELT_BITS) + { + /* The bits are totally contained in a single element. */ + if (shift + n < SBITMAP_ELT_BITS) + elm &= ((1 << n) - 1); + return (elm == 0); + } + + if (elm) + return false; + + n -= SBITMAP_ELT_BITS - shift; + i++; + + /* Deal with full elts. */ + while (n >= SBITMAP_ELT_BITS) + { + if (bmap->elms[i]) + return false; + i++; + n -= SBITMAP_ELT_BITS; + } + + /* The leftover bits. */ + if (n) + { + elm = bmap->elms[i]; + elm &= ((1 << n) - 1); + return (elm == 0); + } + + return true; +} + + + /* Zero all elements in a bitmap. */ void diff --git a/gcc/sbitmap.h b/gcc/sbitmap.h index 3736341e251..7e2bc707677 100644 --- a/gcc/sbitmap.h +++ b/gcc/sbitmap.h @@ -1,5 +1,5 @@ /* Simple bitmaps. - Copyright (C) 1999, 2000, 2002, 2003, 2004, 2006, 2007 + Copyright (C) 1999, 2000, 2002, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GCC. @@ -219,6 +219,7 @@ extern void sbitmap_copy (sbitmap, const_sbitmap); extern void sbitmap_copy_n (sbitmap, const_sbitmap, unsigned int); extern int sbitmap_equal (const_sbitmap, const_sbitmap); extern bool sbitmap_empty_p (const_sbitmap); +extern bool sbitmap_range_empty_p (const_sbitmap, unsigned int, unsigned int); extern void sbitmap_zero (sbitmap); extern void sbitmap_ones (sbitmap); extern void sbitmap_vector_zero (sbitmap *, unsigned int); |