]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Speed up by shifting the currently visited...
authorKazu Hirata <kazu@gcc.gnu.org>
Mon, 18 Oct 2004 23:56:18 +0000 (23:56 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Mon, 18 Oct 2004 23:56:18 +0000 (23:56 +0000)
* sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Speed up by shifting
the currently visited word to right.

From-SVN: r89259

gcc/sbitmap.h

index c18b3762b4a60f444c62027ab3ed9f6c72841f27..e75e3b66df3069cf5d10a8517a1b092119463423 100644 (file)
@@ -58,30 +58,24 @@ typedef SBITMAP_ELT_TYPE *sbitmap_ptr;
 /* Loop over all elements of SBITSET, starting with MIN.  */
 #define EXECUTE_IF_SET_IN_SBITMAP(SBITMAP, MIN, N, CODE)               \
 do {                                                                   \
-  unsigned int word_num_;                                              \
+  unsigned int word_num_ = (MIN) / (unsigned int) SBITMAP_ELT_BITS;    \
   unsigned int bit_num_ = (MIN) % (unsigned int) SBITMAP_ELT_BITS;     \
   unsigned int size_ = (SBITMAP)->size;                                        \
   SBITMAP_ELT_TYPE *ptr_ = (SBITMAP)->elms;                            \
+  SBITMAP_ELT_TYPE word_ = ptr_[word_num_] >> bit_num_;                        \
                                                                        \
-  for (word_num_ = (MIN) / (unsigned int) SBITMAP_ELT_BITS;            \
-       word_num_ < size_; word_num_++, bit_num_ = 0)                   \
+  for (;                                                               \
+       word_num_ < size_;                                              \
+       word_num_++, bit_num_ = 0, word_ = ptr_[word_num_])             \
     {                                                                  \
-      SBITMAP_ELT_TYPE word_ = ptr_[word_num_];                                \
-                                                                       \
-      if (word_ != 0)                                                  \
-       for (; bit_num_ < SBITMAP_ELT_BITS; bit_num_++)                 \
-         {                                                             \
-           SBITMAP_ELT_TYPE _mask = (SBITMAP_ELT_TYPE) 1 << bit_num_;  \
-                                                                       \
-           if ((word_ & _mask) != 0)                                   \
-             {                                                         \
-               word_ &= ~ _mask;                                       \
-               (N) = word_num_ * SBITMAP_ELT_BITS + bit_num_;          \
-               CODE;                                                   \
-               if (word_ == 0)                                         \
-                 break;                                                \
-             }                                                         \
-         }                                                             \
+      for (; word_ != 0; word_ >>= 1, bit_num_++)                      \
+       {                                                               \
+         if ((word_ & 1) != 0)                                         \
+           {                                                           \
+             (N) = word_num_ * SBITMAP_ELT_BITS + bit_num_;            \
+             CODE;                                                     \
+           }                                                           \
+       }                                                               \
     }                                                                  \
 } while (0)