aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/bitmap.c12
2 files changed, 11 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ca0ebf5..b3aae11 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2010-06-22 Uros Bizjak <ubizjak@gmail.com>
+ * bitmap.c (bitmap_clear_bit): Micro optimize.
+
+2010-06-22 Uros Bizjak <ubizjak@gmail.com>
+
* config/i386/i386.md (SWI1248x): New mode iterator.
(SWI48x): Ditto.
(SWI12): Ditto.
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index aeaf2ea..f2fd2bd 100644
--- a/gcc/bitmap.c
+++ b/gcc/bitmap.c
@@ -624,11 +624,13 @@ bitmap_clear_bit (bitmap head, int bit)
BITMAP_WORD bit_val = ((BITMAP_WORD) 1) << bit_num;
bool res = (ptr->bits[word_num] & bit_val) != 0;
if (res)
- ptr->bits[word_num] &= ~bit_val;
-
- /* If we cleared the entire word, free up the element. */
- if (bitmap_element_zerop (ptr))
- bitmap_element_free (head, ptr);
+ {
+ ptr->bits[word_num] &= ~bit_val;
+ /* If we cleared the entire word, free up the element. */
+ if (!ptr->bits[word_num]
+ && bitmap_element_zerop (ptr))
+ bitmap_element_free (head, ptr);
+ }
return res;
}