From 07309d58d08122d67d722bc297eb371d9788488c Mon Sep 17 00:00:00 2001
From: Uros Bizjak <ubizjak@gmail.com>
Date: Tue, 22 Jun 2010 16:44:24 +0200
Subject: [PATCH] * bitmap.c (bitmap_clear_bit): Micro optimize.

From-SVN: r161189
---
 gcc/ChangeLog |  4 ++++
 gcc/bitmap.c  | 12 +++++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ca0ebf53abf2..b3aae11cf09b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+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.
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index aeaf2ea00e1c..f2fd2bdb510a 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;
     }
-- 
GitLab