Patchwork Annotate GC bitmaps

login
register
mail settings
Submitter Richard Guenther
Date Aug. 17, 2012, 10:41 a.m.
Message ID <alpine.LNX.2.00.1208171241030.28649@zhemvz.fhfr.qr>
Download mbox | patch
Permalink /patch/178186/
State New
Headers show

Comments

Richard Guenther - Aug. 17, 2012, 10:41 a.m.
This marks GTY bitmaps properly for most efficient marking.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2012-08-17  Richard Guenther  <rguenther@suse.de>

	* bitmap.h (struct bitmap_element_def): GTY annotate next/prev.
	(struct bitmap_head_def): GTY skip current field.

Patch

Index: gcc/bitmap.h
===================================================================
--- gcc/bitmap.h	(revision 190471)
+++ gcc/bitmap.h	(working copy)
@@ -167,9 +167,9 @@  typedef struct GTY (()) bitmap_obstack {
    bitmap_elt_clear_from to be implemented in unit time rather than
    linear in the number of elements to be freed.  */
 
-typedef struct GTY(()) bitmap_element_def {
-  struct bitmap_element_def *next;		/* Next element.  */
-  struct bitmap_element_def *prev;		/* Previous element.  */
+typedef struct GTY((chain_next ("%h.next"), chain_prev ("%h.prev"))) bitmap_element_def {
+  struct bitmap_element_def *next;	/* Next element.  */
+  struct bitmap_element_def *prev;	/* Previous element.  */
   unsigned int indx;			/* regno/BITMAP_ELEMENT_ALL_BITS.  */
   BITMAP_WORD bits[BITMAP_ELEMENT_WORDS]; /* Bits that are set.  */
 } bitmap_element;
@@ -177,15 +177,17 @@  typedef struct GTY(()) bitmap_element_de
 struct bitmap_descriptor;
 /* Head of bitmap linked list.  gengtype ignores ifdefs, but for
    statistics we need to add a bitmap descriptor pointer.  As it is
-   not collected, we can just GTY((skip)) it.   */
+   not collected, we can just GTY((skip(""))) it.  Likewise current
+   points to something already pointed to by the chain started by first,
+   no need to walk it again.  */
 
 typedef struct GTY(()) bitmap_head_def {
-  bitmap_element *first;	/* First element in linked list.  */
-  bitmap_element *current;	/* Last element looked at.  */
-  unsigned int indx;		/* Index of last element looked at.  */
-  bitmap_obstack *obstack;	/* Obstack to allocate elements from.
-				   If NULL, then use GGC allocation.  */
-  struct bitmap_descriptor GTY((skip)) *desc;
+  bitmap_element *first;		/* First element in linked list.  */
+  bitmap_element * GTY((skip(""))) current; /* Last element looked at.  */
+  unsigned int indx;			/* Index of last element looked at.  */
+  bitmap_obstack *obstack;		/* Obstack to allocate elements from.
+					   If NULL, then use GGC allocation.  */
+  struct bitmap_descriptor GTY((skip(""))) *desc;
 } bitmap_head;
 
 /* Global data */