[PATCH] Shrink symtab_node_base
Richard Guenther
rguenther@suse.de
Thu Sep 27 15:25:00 GMT 2012
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.
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
More information about the Gcc-patches
mailing list