X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fbitmap.c;h=8d7f1b2aa9536e52528449f0211c08fc84b75f1d;hp=f7309a02c577464ccecdf6bb063fc836f9673f4b;hb=3550cdc15f67928728dace2862aa0312301ba7a8;hpb=4b987facd8ba658d00c277a7e9c46548b492854f diff --git a/gcc/bitmap.c b/gcc/bitmap.c index f7309a02c57..8d7f1b2aa95 100644 --- a/gcc/bitmap.c +++ b/gcc/bitmap.c @@ -1,6 +1,6 @@ /* Functions to support general ended bitmaps. Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, - 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -21,9 +21,6 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include "coretypes.h" -#include "tm.h" -#include "rtl.h" -#include "flags.h" #include "obstack.h" #include "ggc.h" #include "bitmap.h" @@ -42,6 +39,7 @@ struct bitmap_descriptor HOST_WIDEST_INT peak; HOST_WIDEST_INT current; int nsearches; + int search_iter; }; /* Hashtable mapping bitmap names to descriptors. */ @@ -229,7 +227,7 @@ bitmap_element_allocate (bitmap head) /* Inner list was just a singleton. */ bitmap_ggc_free = element->prev; else - element = GGC_NEW (bitmap_element); + element = ggc_alloc_bitmap_element_def (); } #ifdef GATHER_STATISTICS @@ -374,7 +372,7 @@ bitmap_gc_alloc_stat (ALONE_MEM_STAT_DECL) { bitmap map; - map = GGC_NEW (struct bitmap_head_def); + map = ggc_alloc_bitmap_head_def (); bitmap_initialize_stat (map, NULL PASS_MEM_STAT); #ifdef GATHER_STATISTICS register_overhead (map, sizeof (bitmap_head)); @@ -498,7 +496,7 @@ bitmap_elt_insert_after (bitmap head, bitmap_element *elt, unsigned int indx) } else { - gcc_assert (head->current); + gcc_checking_assert (head->current); node->next = elt->next; if (node->next) node->next->prev = node; @@ -556,12 +554,12 @@ bitmap_find_bit (bitmap head, unsigned int bit) bitmap_element *element; unsigned int indx = bit / BITMAP_ELEMENT_ALL_BITS; -#ifdef GATHER_STATISTICS - head->desc->nsearches++; -#endif if (head->current == 0 || head->indx == indx) return head->current; +#ifdef GATHER_STATISTICS + head->desc->nsearches++; +#endif if (head->indx < indx) /* INDX is beyond head->indx. Search from head->current @@ -569,7 +567,11 @@ bitmap_find_bit (bitmap head, unsigned int bit) for (element = head->current; element->next != 0 && element->indx < indx; element = element->next) +#ifdef GATHER_STATISTICS + head->desc->search_iter++; +#else ; +#endif else if (head->indx / 2 < indx) /* INDX is less than head->indx and closer to head->indx than to @@ -577,7 +579,11 @@ bitmap_find_bit (bitmap head, unsigned int bit) for (element = head->current; element->prev != 0 && element->indx > indx; element = element->prev) +#ifdef GATHER_STATISTICS + head->desc->search_iter++; +#else ; +#endif else /* INDX is less than head->indx and closer to 0 than to @@ -585,7 +591,11 @@ bitmap_find_bit (bitmap head, unsigned int bit) for (element = head->first; element->next != 0 && element->indx < indx; element = element->next) +#ifdef GATHER_STATISTICS + head->desc->search_iter++; +#else ; +#endif /* `element' is the nearest to the one we want. If it's not the one we want, the one we want doesn't exist. */ @@ -611,11 +621,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; } @@ -767,7 +779,7 @@ bitmap_first_set_bit (const_bitmap a) BITMAP_WORD word; unsigned ix; - gcc_assert (elt); + gcc_checking_assert (elt); bit_no = elt->indx * BITMAP_ELEMENT_ALL_BITS; for (ix = 0; ix != BITMAP_ELEMENT_WORDS; ix++) { @@ -802,7 +814,7 @@ bitmap_first_set_bit (const_bitmap a) if (!(word & 0x1)) word >>= 1, bit_no += 1; - gcc_assert (word & 1); + gcc_checking_assert (word & 1); #endif return bit_no; } @@ -818,7 +830,7 @@ bitmap_last_set_bit (const_bitmap a) BITMAP_WORD word; int ix; - gcc_assert (elt); + gcc_checking_assert (elt); while (elt->next) elt = elt->next; bit_no = elt->indx * BITMAP_ELEMENT_ALL_BITS; @@ -856,7 +868,7 @@ bitmap_last_set_bit (const_bitmap a) word >>= 1, bit_no += 1; #endif - gcc_assert (word & 1); + gcc_checking_assert (word & 1); return bit_no; } @@ -895,7 +907,7 @@ bitmap_and (bitmap dst, const_bitmap a, const_bitmap b) dst_elt = bitmap_elt_insert_after (dst, dst_prev, a_elt->indx); else dst_elt->indx = a_elt->indx; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = a_elt->bits[ix] & b_elt->bits[ix]; @@ -914,7 +926,7 @@ bitmap_and (bitmap dst, const_bitmap a, const_bitmap b) /* Ensure that dst->current is valid. */ dst->current = dst->first; bitmap_elt_clear_from (dst, dst_elt); - gcc_assert (!dst->current == !dst->first); + gcc_checking_assert (!dst->current == !dst->first); if (dst->current) dst->indx = dst->current->indx; } @@ -947,7 +959,7 @@ bitmap_and_into (bitmap a, const_bitmap b) unsigned ix; BITMAP_WORD ior = 0; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = a_elt->bits[ix] & b_elt->bits[ix]; @@ -962,8 +974,8 @@ bitmap_and_into (bitmap a, const_bitmap b) } } bitmap_elt_clear_from (a, a_elt); - gcc_assert (!a->current == !a->first); - gcc_assert (!a->current || a->indx == a->current->indx); + gcc_checking_assert (!a->current == !a->first + && (!a->current || a->indx == a->current->indx)); } @@ -979,7 +991,7 @@ bitmap_elt_copy (bitmap dst, bitmap_element *dst_elt, bitmap_element *dst_prev, { unsigned ix; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) if (src_elt->bits[ix] != dst_elt->bits[ix]) { dst_elt->bits[ix] = src_elt->bits[ix]; @@ -1043,7 +1055,7 @@ bitmap_and_compl (bitmap dst, const_bitmap a, const_bitmap b) if (!changed && dst_elt && dst_elt->indx == a_elt->indx) { - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = a_elt->bits[ix] & ~b_elt->bits[ix]; @@ -1069,7 +1081,7 @@ bitmap_and_compl (bitmap dst, const_bitmap a, const_bitmap b) new_element = false; } - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = a_elt->bits[ix] & ~b_elt->bits[ix]; @@ -1106,7 +1118,7 @@ bitmap_and_compl (bitmap dst, const_bitmap a, const_bitmap b) changed = true; bitmap_elt_clear_from (dst, dst_elt); } - gcc_assert (!dst->current == !dst->first); + gcc_checking_assert (!dst->current == !dst->first); if (dst->current) dst->indx = dst->current->indx; @@ -1146,7 +1158,7 @@ bitmap_and_compl_into (bitmap a, const_bitmap b) unsigned ix; BITMAP_WORD ior = 0; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD cleared = a_elt->bits[ix] & b_elt->bits[ix]; BITMAP_WORD r = a_elt->bits[ix] ^ cleared; @@ -1162,8 +1174,8 @@ bitmap_and_compl_into (bitmap a, const_bitmap b) b_elt = b_elt->next; } } - gcc_assert (!a->current == !a->first); - gcc_assert (!a->current || a->indx == a->current->indx); + gcc_checking_assert (!a->current == !a->first + && (!a->current || a->indx == a->current->indx)); return changed != 0; } @@ -1194,7 +1206,7 @@ bitmap_set_range (bitmap head, unsigned int start, unsigned int count) bitmap_element_link (head, elt); } - gcc_assert (elt->indx == first_index); + gcc_checking_assert (elt->indx == first_index); elt_prev = elt->prev; for (i = first_index; i <= last_index; i++) { @@ -1440,7 +1452,7 @@ bitmap_compl_and_into (bitmap a, const_bitmap b) unsigned ix; BITMAP_WORD ior = 0; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD cleared = a_elt->bits[ix] & b_elt->bits[ix]; BITMAP_WORD r = b_elt->bits[ix] ^ cleared; @@ -1457,8 +1469,8 @@ bitmap_compl_and_into (bitmap a, const_bitmap b) b_elt = b_elt->next; } } - gcc_assert (!a->current == !a->first); - gcc_assert (!a->current || a->indx == a->current->indx); + gcc_checking_assert (!a->current == !a->first + && (!a->current || a->indx == a->current->indx)); return; } @@ -1481,7 +1493,7 @@ bitmap_elt_ior (bitmap dst, bitmap_element *dst_elt, bitmap_element *dst_prev, if (!changed && dst_elt && dst_elt->indx == a_elt->indx) { - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix]; if (r != dst_elt->bits[ix]) @@ -1498,7 +1510,7 @@ bitmap_elt_ior (bitmap dst, bitmap_element *dst_elt, bitmap_element *dst_prev, dst_elt = bitmap_elt_insert_after (dst, dst_prev, a_elt->indx); else dst_elt->indx = a_elt->indx; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = a_elt->bits[ix] | b_elt->bits[ix]; dst_elt->bits[ix] = r; @@ -1515,7 +1527,7 @@ bitmap_elt_ior (bitmap dst, bitmap_element *dst_elt, bitmap_element *dst_prev, else src = b_elt; - gcc_assert (src); + gcc_checking_assert (src); changed = bitmap_elt_copy (dst, dst_elt, dst_prev, src, changed); } return changed; @@ -1563,7 +1575,7 @@ bitmap_ior (bitmap dst, const_bitmap a, const_bitmap b) changed = true; bitmap_elt_clear_from (dst, dst_elt); } - gcc_assert (!dst->current == !dst->first); + gcc_checking_assert (!dst->current == !dst->first); if (dst->current) dst->indx = dst->current->indx; return changed; @@ -1602,7 +1614,7 @@ bitmap_ior_into (bitmap a, const_bitmap b) a_elt = *a_prev_pnext; } - gcc_assert (!a->current == !a->first); + gcc_checking_assert (!a->current == !a->first); if (a->current) a->indx = a->current->indx; return changed; @@ -1637,7 +1649,7 @@ bitmap_xor (bitmap dst, const_bitmap a, const_bitmap b) dst_elt = bitmap_elt_insert_after (dst, dst_prev, a_elt->indx); else dst_elt->indx = a_elt->indx; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = a_elt->bits[ix] ^ b_elt->bits[ix]; @@ -1680,7 +1692,7 @@ bitmap_xor (bitmap dst, const_bitmap a, const_bitmap b) /* Ensure that dst->current is valid. */ dst->current = dst->first; bitmap_elt_clear_from (dst, dst_elt); - gcc_assert (!dst->current == !dst->first); + gcc_checking_assert (!dst->current == !dst->first); if (dst->current) dst->indx = dst->current->indx; } @@ -1722,7 +1734,7 @@ bitmap_xor_into (bitmap a, const_bitmap b) BITMAP_WORD ior = 0; bitmap_element *next = a_elt->next; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = a_elt->bits[ix] ^ b_elt->bits[ix]; @@ -1737,7 +1749,7 @@ bitmap_xor_into (bitmap a, const_bitmap b) a_elt = next; } } - gcc_assert (!a->current == !a->first); + gcc_checking_assert (!a->current == !a->first); if (a->current) a->indx = a->current->indx; } @@ -1759,7 +1771,7 @@ bitmap_equal_p (const_bitmap a, const_bitmap b) { if (a_elt->indx != b_elt->indx) return false; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) if (a_elt->bits[ix] != b_elt->bits[ix]) return false; } @@ -1784,7 +1796,7 @@ bitmap_intersect_p (const_bitmap a, const_bitmap b) b_elt = b_elt->next; else { - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) if (a_elt->bits[ix] & b_elt->bits[ix]) return true; a_elt = a_elt->next; @@ -1811,7 +1823,7 @@ bitmap_intersect_compl_p (const_bitmap a, const_bitmap b) b_elt = b_elt->next; else { - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) if (a_elt->bits[ix] & ~b_elt->bits[ix]) return true; a_elt = a_elt->next; @@ -1867,7 +1879,7 @@ bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b, const_bitmap k BITMAP_WORD ior = 0; tmp_elt.indx = b_elt->indx; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { BITMAP_WORD r = b_elt->bits[ix] & ~kill_elt->bits[ix]; ior |= r; @@ -1919,7 +1931,7 @@ bitmap_ior_and_compl (bitmap dst, const_bitmap a, const_bitmap b, const_bitmap k changed = true; bitmap_elt_clear_from (dst, dst_elt); } - gcc_assert (!dst->current == !dst->first); + gcc_checking_assert (!dst->current == !dst->first); if (dst->current) dst->indx = dst->current->indx; @@ -1985,7 +1997,7 @@ bitmap_ior_and_into (bitmap a, const_bitmap b, const_bitmap c) overall = 0; and_elt.indx = b_elt->indx; - for (ix = BITMAP_ELEMENT_WORDS; ix--;) + for (ix = 0; ix < BITMAP_ELEMENT_WORDS; ix++) { and_elt.bits[ix] = b_elt->bits[ix] & c_elt->bits[ix]; overall |= and_elt.bits[ix]; @@ -2015,7 +2027,7 @@ bitmap_ior_and_into (bitmap a, const_bitmap b, const_bitmap c) } done: - gcc_assert (!a->current == !a->first); + gcc_checking_assert (!a->current == !a->first); if (a->current) a->indx = a->current->indx; return changed; @@ -2115,8 +2127,9 @@ print_statistics (void **slot, void *b) sprintf (s, "%s:%i (%s)", s1, d->line, d->function); s[41] = 0; fprintf (stderr, "%-41s %8d %15"HOST_WIDEST_INT_PRINT"d %15" - HOST_WIDEST_INT_PRINT"d %15"HOST_WIDEST_INT_PRINT"d %10d\n", - s, d->created, d->allocated, d->peak, d->current, d->nsearches); + HOST_WIDEST_INT_PRINT"d %15"HOST_WIDEST_INT_PRINT"d %10d %10d\n", + s, d->created, d->allocated, d->peak, d->current, d->nsearches, + d->search_iter); i->size += d->allocated; i->count += d->created; } @@ -2134,8 +2147,8 @@ dump_bitmap_statistics (void) return; fprintf (stderr, "\nBitmap Overall " - " Allocated Peak Leak searched " - " per search\n"); + " Allocated Peak Leak searched " + " search itr\n"); fprintf (stderr, "---------------------------------------------------------------------------------\n"); info.count = 0; info.size = 0;