Patchwork minor bitmap.c GATHER_STATISTICS fix-ups

login
register
mail settings
Submitter Steven Bosscher
Date March 6, 2013, 11:04 p.m.
Message ID <CABu31nNs3ivUnwzWUSBMrwTJGixH5YAjdvj0G0KFNTjRAzazbg@mail.gmail.com>
Download mbox | patch
Permalink /patch/225676/
State New
Headers show

Comments

Steven Bosscher - March 6, 2013, 11:04 p.m.
Hello,

This patch fixes a bunch of smaller issues with GATHER_STATISTICS for
bitmaps: overflows in counters and ugly output format.

Bootstrapped (with and without GATHER_STATISTICS) and regtested on
powerpc64-unknown-linux-gnu and on x86_64-unknown-linux-gnu. OK for
trunk?

Ciao!
Steven


	* bitmap.c (struct bitmap_descriptor_d): Use unsigned HOST_WIDEST_INT
	for all counters.
	(struct output_info): Likewise.
	(register_overhead): Remove bad gcc_assert.
	(bitmap_find_bit): If there is only a single bitmap element, do not
	count a miss as a search.
	(print_statistics): Update for counter type changes.
	(dump_bitmap_statistics): Likewise.  Print headers such that they
	are properly lined up with the printed counters.
* bitmap.c (struct bitmap_descriptor_d): Use unsigned HOST_WIDEST_INT
	for all counters.
	(struct output_info): Likewise.
	(register_overhead): Remove bad gcc_assert.
	(bitmap_find_bit): If there is only a single bitmap element, do not
	count a miss as a search.
	(print_statistics): Update for counter type changes.
	(dump_bitmap_statistics): Likewise.  Print headers such that they
	are properly lined up with the printed counters.
Richard Guenther - March 7, 2013, 9:55 a.m.
On Thu, Mar 7, 2013 at 12:04 AM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
> Hello,
>
> This patch fixes a bunch of smaller issues with GATHER_STATISTICS for
> bitmaps: overflows in counters and ugly output format.
>
> Bootstrapped (with and without GATHER_STATISTICS) and regtested on
> powerpc64-unknown-linux-gnu and on x86_64-unknown-linux-gnu. OK for
> trunk?

Ok.

Thanks,
Richard.

> Ciao!
> Steven
>
>
>         * bitmap.c (struct bitmap_descriptor_d): Use unsigned HOST_WIDEST_INT
>         for all counters.
>         (struct output_info): Likewise.
>         (register_overhead): Remove bad gcc_assert.
>         (bitmap_find_bit): If there is only a single bitmap element, do not
>         count a miss as a search.
>         (print_statistics): Update for counter type changes.
>         (dump_bitmap_statistics): Likewise.  Print headers such that they
>         are properly lined up with the printed counters.

Patch

Index: bitmap.c
===================================================================
--- bitmap.c	(revision 196508)
+++ bitmap.c	(working copy)
@@ -34,11 +34,11 @@  struct bitmap_descriptor_d
   const char *file;
   int line;
   int created;
-  HOST_WIDEST_INT allocated;
-  HOST_WIDEST_INT peak;
-  HOST_WIDEST_INT current;
-  int nsearches;
-  int search_iter;
+  unsigned HOST_WIDEST_INT allocated;
+  unsigned HOST_WIDEST_INT peak;
+  unsigned HOST_WIDEST_INT current;
+  unsigned HOST_WIDEST_INT nsearches;
+  unsigned HOST_WIDEST_INT search_iter;
 };
 
 typedef struct bitmap_descriptor_d *bitmap_descriptor;
@@ -121,7 +121,6 @@  register_overhead (bitmap b, int amount)
   desc->current += amount;
   if (amount > 0)
     desc->allocated += amount;
-  gcc_assert (desc->current >= 0);
   if (desc->peak < desc->current)
     desc->peak = desc->current;
 }
@@ -565,10 +564,15 @@  bitmap_find_bit (bitmap head, unsigned int bit)
   bitmap_element *element;
   unsigned int indx = bit / BITMAP_ELEMENT_ALL_BITS;
 
-  if (head->current == 0
+  if (head->current == NULL
       || head->indx == indx)
     return head->current;
+  if (head->current == head->first
+      && head->first->next == NULL)
+    return NULL;
 
+  /* This bitmap has more than one element, and we're going to look
+     through the elements list.  Count that as a search.  */
   if (GATHER_STATISTICS)
     bitmap_descriptors[head->descriptor_id]->nsearches++;
 
@@ -2132,8 +2136,8 @@  bitmap_print (FILE *file, const_bitmap head, const
 /* Used to accumulate statistics about bitmap sizes.  */
 struct output_info
 {
-  HOST_WIDEST_INT size;
-  int count;
+  unsigned HOST_WIDEST_INT size;
+  unsigned HOST_WIDEST_INT count;
 };
 
 /* Called via htab_traverse.  Output bitmap descriptor pointed out by SLOT
@@ -2153,10 +2157,14 @@  print_statistics (void **slot, void *b)
 	s1 = s2 + 4;
       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 %10d\n",
-	       s, d->created, d->allocated, d->peak, d->current, d->nsearches,
-	       d->search_iter);
+      fprintf (stderr,
+	       "%-41s %9u"
+	       " %15"HOST_WIDEST_INT_PRINT"d %15"HOST_WIDEST_INT_PRINT"d"
+	       " %15"HOST_WIDEST_INT_PRINT"d"
+	       " %10"HOST_WIDEST_INT_PRINT"d %10"HOST_WIDEST_INT_PRINT"d\n",
+	       s, d->created,
+	       d->allocated, d->peak, d->current,
+	       d->nsearches, d->search_iter);
       i->size += d->allocated;
       i->count += d->created;
     }
@@ -2175,15 +2183,18 @@  dump_bitmap_statistics (void)
   if (!bitmap_desc_hash)
     return;
 
-  fprintf (stderr, "\nBitmap                                     Overall "
-		   "      Allocated            Peak            Leak   searched "
-		   "  search itr\n");
+  fprintf (stderr,
+	   "\n%-41s %9s %15s %15s %15s %10s %10s\n",
+	   "Bitmap", "Overall",
+	   "Allocated", "Peak", "Leak",
+	   "searched", "search_itr");
   fprintf (stderr, "---------------------------------------------------------------------------------\n");
   info.count = 0;
   info.size = 0;
   htab_traverse (bitmap_desc_hash, print_statistics, &info);
   fprintf (stderr, "---------------------------------------------------------------------------------\n");
-  fprintf (stderr, "%-40s %9d %15"HOST_WIDEST_INT_PRINT"d\n",
+  fprintf (stderr,
+	   "%-41s %9"HOST_WIDEST_INT_PRINT"d %15"HOST_WIDEST_INT_PRINT"d\n",
 	   "Total", info.count, info.size);
   fprintf (stderr, "---------------------------------------------------------------------------------\n");
 }