This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
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 = ¶meter_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 = ¶meter_packs;
ppd.visited = pointer_set_create ();
likewise.
void
check_for_bare_parameter_packs (tree t)
{
...
ppd.parameter_packs = ¶meter_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)
Richard.