Patchwork Shrink symtab_node_base

login
register
mail settings
Submitter Richard Guenther
Date Sept. 27, 2012, 1:18 p.m.
Message ID <alpine.LNX.2.00.1209271517281.4063@zhemvz.fhfr.qr>
Download mbox | patch
Permalink /patch/187354/
State New
Headers show

Comments

Richard Guenther - Sept. 27, 2012, 1:18 p.m.
The following patch shrinks symtab_node_base from 104 bytes to 88 bytes
(on x86_64) by re-ordering and packing fields.

Bootstrap & regtest pending.

Richard.

2012-09-27  Richard Guenther  <rguenther@suse.de>

	* cgraph.h (symtab_node_base): Re-order and pack fields.

Patch

Index: gcc/cgraph.h
===================================================================
--- gcc/cgraph.h	(revision 191798)
+++ gcc/cgraph.h	(working copy)
@@ -43,14 +43,37 @@  enum symtab_type
 struct GTY(()) symtab_node_base
 {
   /* Type of the symbol.  */
-  enum symtab_type type;
+  ENUM_BITFIELD (symtab_type) type : 8;
+
+  /* The symbols resolution.  */
+  ENUM_BITFIELD (ld_plugin_symbol_resolution) resolution : 8;
+
+  /* Set when function has address taken.
+     In current implementation it imply needed flag. */
+  unsigned address_taken : 1;
+  /* Set when variable is used from other LTRANS partition.  */
+  unsigned used_from_other_partition : 1;
+  /* Set when function is available in the other LTRANS partition.  
+     During WPA output it is used to mark nodes that are present in
+     multiple partitions.  */
+  unsigned in_other_partition : 1;
+  /* Set when function is visible by other units.  */
+  unsigned externally_visible : 1;
+  /* Needed variables might become dead by optimization.  This flag
+     forces the variable to be output even if it appears dead otherwise.  */
+  unsigned force_output : 1;
+
+  /* Ordering of all symtab entries.  */
+  int order;
+
   tree decl;
+
+  /* Vectors of referring and referenced entities.  */
   struct ipa_ref_list ref_list;
+
   /* Circular list of nodes in the same comdat group if non-NULL.  */
   symtab_node same_comdat_group;
-  /* Ordering of all symtab entries.  */
-  int order;
-  enum ld_plugin_symbol_resolution resolution;
+
   /* File stream where this node is being written to.  */
   struct lto_file_decl_data * lto_file_data;
 
@@ -65,21 +88,6 @@  struct GTY(()) symtab_node_base
   symtab_node previous_sharing_asm_name;
 
   PTR GTY ((skip)) aux;
-
-  /* Set when function has address taken.
-     In current implementation it imply needed flag. */
-  unsigned address_taken : 1;
-  /* Set when variable is used from other LTRANS partition.  */
-  unsigned used_from_other_partition : 1;
-  /* Set when function is available in the other LTRANS partition.  
-     During WPA output it is used to mark nodes that are present in
-     multiple partitions.  */
-  unsigned in_other_partition : 1;
-  /* Set when function is visible by other units.  */
-  unsigned externally_visible : 1;
-  /* Needed variables might become dead by optimization.  This flag
-     forces the variable to be output even if it appears dead otherwise.  */
-  unsigned force_output : 1;
 };
 
 enum availability