This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Reduce size of some cgraph structures


This reduces cgraph_node and cgraph_varpool_node size by using
bitfields.  Once we have >4 consecutive bool members this is
always a good idea.

Further savings could be done by re-merging the global_info.inlined
flag to the main struct.

Ok for mainline?

Thanks,
Richard.

:ADDPATCH cgraph:

2006-06-15  Richard Guenther  <rguenther@suse.de>

	* cgraph.h (struct cgraph_local_info): Turn bool elements
	into a bitfield.
	(struct cgraph_node): Likewise.
	(struct cgraph_varpool_node): Likewise.

Index: cgraph.h
===================================================================
*** cgraph.h	(revision 114684)
--- cgraph.h	(working copy)
*************** struct cgraph_local_info GTY(())
*** 56,86 ****
  
    /* Set when function function is visible in current compilation unit only
       and its address is never taken.  */
!   bool local;
  
    /* Set when function is visible by other units.  */
!   bool externally_visible;
  
    /* Set once it has been finalized so we consider it to be output.  */
!   bool finalized;
  
    /* False when there something makes inlining impossible (such as va_arg).  */
!   bool inlinable;
  
    /* True when function should be inlined independently on its size.  */
!   bool disregard_inline_limits;
  
    /* True when the function has been originally extern inline, but it is
       redefined now.  */
!   bool redefined_extern_inline;
  
    /* True if statics_read_for_function and
       statics_written_for_function contain valid data.  */
!   bool for_functions_valid;
  
    /* True if the function is going to be emitted in some other translation
       unit, referenced from vtable.  */
!   bool vtable_method;
  };
  
  /* Information about the function that needs to be computed globally
--- 56,86 ----
  
    /* Set when function function is visible in current compilation unit only
       and its address is never taken.  */
!   unsigned local : 1;
  
    /* Set when function is visible by other units.  */
!   unsigned externally_visible : 1;
  
    /* Set once it has been finalized so we consider it to be output.  */
!   unsigned finalized : 1;
  
    /* False when there something makes inlining impossible (such as va_arg).  */
!   unsigned inlinable : 1;
  
    /* True when function should be inlined independently on its size.  */
!   unsigned disregard_inline_limits : 1;
  
    /* True when the function has been originally extern inline, but it is
       redefined now.  */
!   unsigned redefined_extern_inline : 1;
  
    /* True if statics_read_for_function and
       statics_written_for_function contain valid data.  */
!   unsigned for_functions_valid : 1;
  
    /* True if the function is going to be emitted in some other translation
       unit, referenced from vtable.  */
!   unsigned vtable_method : 1;
  };
  
  /* Information about the function that needs to be computed globally
*************** struct cgraph_node GTY((chain_next ("%h.
*** 146,168 ****
    int uid;
    /* Ordering of all cgraph nodes.  */
    int order;
    /* Set when function must be output - it is externally visible
       or its address is taken.  */
!   bool needed;
    /* Set when function is reachable by call from other function
       that is either reachable or needed.  */
!   bool reachable;
    /* Set once the function is lowered (i.e. its CFG is built).  */
!   bool lowered;
    /* Set once the function has been instantiated and its callee
       lists created.  */
!   bool analyzed;
    /* Set when function is scheduled to be assembled.  */
!   bool output;
    /* Set when function is visible by other units.  */
!   bool externally_visible;
    /* Set for aliases once they got through assemble_alias.  */
!   bool alias;
  
    /* In non-unit-at-a-time mode the function body of inline candidates is saved
       into clone before compiling so the function in original form can be
--- 146,169 ----
    int uid;
    /* Ordering of all cgraph nodes.  */
    int order;
+ 
    /* Set when function must be output - it is externally visible
       or its address is taken.  */
!   unsigned needed : 1;
    /* Set when function is reachable by call from other function
       that is either reachable or needed.  */
!   unsigned reachable : 1;
    /* Set once the function is lowered (i.e. its CFG is built).  */
!   unsigned lowered : 1;
    /* Set once the function has been instantiated and its callee
       lists created.  */
!   unsigned analyzed : 1;
    /* Set when function is scheduled to be assembled.  */
!   unsigned output : 1;
    /* Set when function is visible by other units.  */
!   unsigned externally_visible : 1;
    /* Set for aliases once they got through assemble_alias.  */
!   unsigned alias : 1;
  
    /* In non-unit-at-a-time mode the function body of inline candidates is saved
       into clone before compiling so the function in original form can be
*************** struct cgraph_varpool_node GTY(())
*** 209,229 ****
  
    /* Set when function must be output - it is externally visible
       or its address is taken.  */
!   bool needed;
    /* Needed variables might become dead by optimization.  This flag
       forces the variable to be output even if it appears dead otherwise.  */
!   bool force_output;
    /* Set once the variable has been instantiated and its callee
       lists created.  */
!   bool analyzed;
    /* Set once it has been finalized so we consider it to be output.  */
!   bool finalized;
    /* Set when variable is scheduled to be assembled.  */
!   bool output;
    /* Set when function is visible by other units.  */
!   bool externally_visible;
    /* Set for aliases once they got through assemble_alias.  */
!   bool alias;
  };
  
  /* Every top level asm statement is put into a cgraph_asm_node.  */
--- 210,230 ----
  
    /* Set when function must be output - it is externally visible
       or its address is taken.  */
!   unsigned needed : 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;
    /* Set once the variable has been instantiated and its callee
       lists created.  */
!   unsigned analyzed : 1;
    /* Set once it has been finalized so we consider it to be output.  */
!   unsigned finalized : 1;
    /* Set when variable is scheduled to be assembled.  */
!   unsigned output : 1;
    /* Set when function is visible by other units.  */
!   unsigned externally_visible : 1;
    /* Set for aliases once they got through assemble_alias.  */
!   unsigned alias : 1;
  };
  
  /* Every top level asm statement is put into a cgraph_asm_node.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]