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]

Re: Variadic templates, fourth revision [Committed]


> On 3/13/07, Richard Guenther <richard.guenther@gmail.com> wrote:
> >On 3/13/07, Paolo Bonzini <paolo.bonzini@lu.unisi.ch> wrote:
> >> >> > This causes a 15% compile time memory usage regression for tramp3d,
> >> >> > DLV and mico sources :/  (which makes it a release-blocker)
> >> >>
> >> >> Mem tester report 19% on Gerald's testcase.
> >> >
> >> > The patch here should fix the problem:
> >> >
> >> >  http://gcc.gnu.org/ml/gcc-patches/2007-03/msg00759.html
> >>
> >> The patch only saves 1% though (from 437001kB down to 432961kB).
> >
> >We'll see as soon as it is committed (I would say it's nearly
> >obvious...).  But I
> >fear that the above number hints at it being not fixed.
> 
> /* Determines if the expression or type T uses any parameter packs.  */
> bool
> uses_parameter_packs (tree t)
> {
>  tree parameter_packs = NULL_TREE;
>  struct find_parameter_pack_data ppd;
>  ppd.parameter_packs = &parameter_packs;
>  ppd.visited = pointer_set_create ();
>  walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
>  return parameter_packs != NULL_TREE;
> }
> 
> This doesn't destroy the pointer set ... ;)
> 
> tree
> make_pack_expansion (tree arg)
> {
> ...
>      /* Determine which parameter packs will be used by the base
>         class expansion.  */
>      ppd.visited = pointer_set_create ();
> ...
>  /* Determine which parameter packs will be expanded.  */
>  ppd.parameter_packs = &parameter_packs;
>  ppd.visited = pointer_set_create ();
> 
> likewise.
> 
> void
> check_for_bare_parameter_packs (tree t)
> {
> ...
>  ppd.parameter_packs = &parameter_packs;
>  ppd.visited = pointer_set_create ();
> 
> 
> again...  (maybe more cases, I stopped looking)
> 
> (I wonder if using pointer-set's is worth it at all for walk_tree to
> avoid walking
> duplicates in all cases)

Looks also like those are good candidates for
walk_tree_without_duplicates that does the neccesary freeing.

Honza
> 
> Richard.


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