* bitmap.h (+bmp_iter_next_bit): New.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Jun 2010 21:56:08 +0000 (21:56 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Jun 2010 21:56:08 +0000 (21:56 +0000)
(bmp_iter_set, bmp_iter_and, bmp_iter_and_compl):
Use it.

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

gcc/ChangeLog
gcc/bitmap.h

index b8ec704..fa404da 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-11  Jan Hubicka  <jh@suse.cz>
+
+       * bitmap.h (+bmp_iter_next_bit): New.
+       (bmp_iter_set, bmp_iter_and, bmp_iter_and_compl):
+       Use it.
+
 2010-06-11  Sandra Loosemore  <sandra@codesourcery.com>
             Eric Botcazou  <ebotcazou@adacore.com>
 
index 1163b2f..68a4620 100644 (file)
@@ -385,6 +385,27 @@ bmp_iter_next (bitmap_iterator *bi, unsigned *bit_no)
   *bit_no += 1;
 }
 
+/* Advance to first set bit in BI.  */
+
+static inline void
+bmp_iter_next_bit (bitmap_iterator * bi, unsigned *bit_no)
+{
+#if (GCC_VERSION >= 3004)
+  {
+    unsigned int n = __builtin_ctzl (bi->bits);
+    gcc_assert (sizeof (unsigned long) == sizeof (BITMAP_WORD));
+    bi->bits >>= n;
+    *bit_no += n;
+  }
+#else
+  while (!(bi->bits & 1))
+    {
+      bi->bits >>= 1;
+      *bit_no += 1;
+    }
+#endif
+}
+
 /* Advance to the next nonzero bit of a single bitmap, we will have
    already advanced past the just iterated bit.  Return true if there
    is a bit to iterate.  */
@@ -396,11 +417,7 @@ bmp_iter_set (bitmap_iterator *bi, unsigned *bit_no)
   if (bi->bits)
     {
     next_bit:
-      while (!(bi->bits & 1))
-       {
-         bi->bits >>= 1;
-         *bit_no += 1;
-       }
+      bmp_iter_next_bit (bi, bit_no);
       return true;
     }
 
@@ -443,11 +460,7 @@ bmp_iter_and (bitmap_iterator *bi, unsigned *bit_no)
   if (bi->bits)
     {
     next_bit:
-      while (!(bi->bits & 1))
-       {
-         bi->bits >>= 1;
-         *bit_no += 1;
-       }
+      bmp_iter_next_bit (bi, bit_no);
       return true;
     }
 
@@ -510,11 +523,7 @@ bmp_iter_and_compl (bitmap_iterator *bi, unsigned *bit_no)
   if (bi->bits)
     {
     next_bit:
-      while (!(bi->bits & 1))
-       {
-         bi->bits >>= 1;
-         *bit_no += 1;
-       }
+      bmp_iter_next_bit (bi, bit_no);
       return true;
     }