https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78140

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kuganv at linaro dot org

--- Comment #19 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Looking into detailed mem reports we have increase in jump functions size:
ipa-prop.c:4701 (ipa_read_node_info)                      0:  0.0%  47378288: 
2.4% 161144168:  6.7%  20010080: 11.8%   1238962
to
ipa-prop.c:5047 (ipa_read_node_info)                      0:  0.0%  74541136:  
3.1% 567308480: 17.9%  13645376:  7.0%   1238212

So while we read about same number of jump functions, the memory usage almost
triples.  The reason is that jump function got a lot bigger now:

  /* Information about zero/non-zero bits.  */                                  
  struct ipa_bits bits;                                                         

  /* Information about value range, containing valid data only when vr_known is 
     true.  */                                                                  
  value_range m_vr;                                                             
  bool vr_known;                                                                

where

/* Information about zero/non-zero bits.  */
struct GTY(()) ipa_bits
{
  /* The propagated value.  */
  widest_int value;
  /* Mask corresponding to the value.
     Similar to ccp_lattice_t, if xth bit of mask is 0,
     implies xth bit of value is constant.  */
  widest_int mask;
  /* True if jump function is known.  */
  bool known;
};

/* Info about value ranges.  */
struct GTY(()) ipa_vr
{
  /* The data fields below are valid only if known is true.  */
  bool known;
  enum value_range_type type;
  wide_int min;
  wide_int max;
};

I think two wide_ints and two widest_ints are major offenders.  We need to find
a way to avoid allocating them for all nodes.  Perhaps implement sharing of
equal ipa_bits and ipa_vr records?

Reply via email to