> On Fri, 11 Dec 2015, Jan Hubicka wrote:
> 
> > Hi,
> > this patch saves about 30% of global decl stream size in firefox.  While
> > implementing the lto sections for initializers I put very stupid heursitcs
> > to get_symbol_initial_value deciding whether the initializer is better 
> > streamed
> > inline or offline.  This ignores strings and may get bit out of hand.
> > 
> > With this patch and the compression, the largest ltrans unit is 
> > 118479156 bytes and 103584016 out of that is a global decl stream.
> 
> So that's still 87% global decl stream.  At least for this ltrans
> unit there couldn't have been a 30% saving.

Yeah, 30% saving was the overall size of global decls streams produced
by WPA, so this one had bad luck. 
> 
> Btw, the separate initializer sections will get separate string
> encoders, right?  So we might end up with larger files due
> to less string sharing which would happen when the strings go into
> the decl section.

Yep, if we get many duplicated stirngs in decl sections, then we will
end up with larger files.  Same thing hapens if you would use the string
in many function initializers..
> > +  if (TREE_CODE (*tp) == STRING_CST)
> > +    *sum -= TREE_STRING_LENGTH (*tp) + 8;
> > +  if (TREE_CODE (*tp) == IDENTIFIER_NODE)
> > +    *sum -= IDENTIFIER_LENGTH (*tp) + 8;
> 
> I doubt we can ever see those.

Me too, I just went though the vairable length trees for completeness.
Can just add gcc_unreachable.
> 
> > +  else
> > +    *sum -= 16;
> > +  if (*sum < 0)
> > +    return *tp;
> > +  return NULL_TREE;
> > +}
> > +
> 
> I'd like to see an explanation for the magic constants.  Also

OK, nothing really scientific behind them.  I simply divided size
of the stream by number of trees in it from the lto stats and picked
nearest power of 2.

> a FE might construct
> 
>  int *a = &CONST_DECL;
> 
> with CONST_DECL having a large array initializer.  walk_tree doesn't
> traverse CONST_DECLs DECL_INITIAL.

CONST_DECL is indexale, so in this case we will always have it in global
stream. We may want to stream initializers for those but for that we need
const decl to be in symbol table (it should) for which we need to sanity
the visibility bits... We have open PR for that.

Honza

Reply via email to