summaryrefslogtreecommitdiffstats
path: root/gcc/bitmap.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2007-11-09 14:01:33 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2007-11-09 14:01:33 +0000
commit6bd6739ac54ddf1529d03fe8ae6f10a862a0fe94 (patch)
treed8b32d4da8ab288343c7d289a01fb22089dced27 /gcc/bitmap.c
parent91bd874e0fada88f33f2618061e20804adbd3239 (diff)
downloadppe42-gcc-6bd6739ac54ddf1529d03fe8ae6f10a862a0fe94.tar.gz
ppe42-gcc-6bd6739ac54ddf1529d03fe8ae6f10a862a0fe94.zip
2007-11-09 Richard Guenther <rguenther@suse.de>
* bitmap.h (bitmap_single_bit_set_p): Declare. * bitmap.c (bitmap_single_bit_set_p): New function. * tree-ssa-alias.c (add_may_alias_for_new_tag): Use it. (maybe_create_global_var): Use bitmap_empty_p. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130045 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/bitmap.c')
-rw-r--r--gcc/bitmap.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index 8b66548add9..c2a66f96a73 100644
--- a/gcc/bitmap.c
+++ b/gcc/bitmap.c
@@ -693,6 +693,40 @@ bitmap_count_bits (const_bitmap a)
return count;
}
+/* Return true if the bitmap has a single bit set. Otherwise return
+ false. */
+
+bool
+bitmap_single_bit_set_p (const_bitmap a)
+{
+ unsigned long count = 0;
+ const bitmap_element *elt;
+ unsigned ix;
+
+ if (bitmap_empty_p (a))
+ return false;
+
+ elt = a->first;
+ /* As there are no completely empty bitmap elements, a second one
+ means we have more than one bit set. */
+ if (elt->next != NULL)
+ return false;
+
+ for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++)
+ {
+#if GCC_VERSION >= 3400
+ /* Note that popcountl matches BITMAP_WORD in type, so the actual size
+ of BITMAP_WORD is not material. */
+ count += __builtin_popcountl (elt->bits[ix]);
+#else
+ count += bitmap_popcount (elt->bits[ix]);
+#endif
+ if (count > 1)
+ return false;
+ }
+
+ return count == 1;
+}
/* Return the bit number of the first set bit in the bitmap. The
OpenPOWER on IntegriCloud