sbitmap.c (sbitmap_range_empty_p): New function.
authorKenneth Zadeck <zadeck@naturalbridge.com>
Mon, 21 Apr 2008 20:15:38 +0000 (20:15 +0000)
committerKenneth Zadeck <zadeck@gcc.gnu.org>
Mon, 21 Apr 2008 20:15:38 +0000 (20:15 +0000)
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.

From-SVN: r134529

gcc/ChangeLog
gcc/bitmap.h
gcc/sbitmap.c
gcc/sbitmap.h

index ed1c788617f9da06caecb741647f667e8b48184a..8b6363a613fbcfd54a03f78177d0b84e9294e888 100644 (file)
@@ -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>
 
index 0b6ed731922df5c7a1556a933042fd1a48b691a6..2a3b0b4baf8c0651862e5fcb4d07cdd58264c5ec 100644 (file)
@@ -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.  */
 
index d8b8d6c1ff50c642b302af35c3ce83362e16639d..cab4ec0e0ed4040716a56b33c8c5d664d9326139 100644 (file)
@@ -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
index 3736341e251125b3c9758addbb46a9358867edba..7e2bc707677750baa8b1ea13a06ba1c6c83ddb5c 100644 (file)
@@ -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);