Variadic templates, fourth revision [Committed]
Richard Guenther
richard.guenther@gmail.com
Tue Mar 13 14:21:00 GMT 2007
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.
More information about the Gcc-patches
mailing list