On Fri, Apr 19, 2013 at 11:31 PM, Andi Kleen <a...@firstfloor.org> wrote:
> From: Andi Kleen <a...@linux.intel.com>
>
> WPA can spend a lot of time just resizing the type merging hash tables.
> This adds experimental --params to size them large initially. On my large
> LTO build I get a 1.1% improvement in build time from presizing the hash
> tables to a large enough value.

With what values?  Certainly we will have at least as many hashes
as types, so increasing the hash cache sizes to the size of the types
(thus use the same --param) would be obvious.  Likewise there will
be less canonical types than regular types.

Richard.

> Later on I think it's better to either always use large hash tables
> (virtual memory is cheap) or to dynamically size them based on a
> estimate of the available types. But as a first step having
> these --params is useful to play around with it.
>
> gcc/:
>
> 2013-04-19  Andi Kleen  <a...@linux.intel.com>
>
>         * gimple.c (gimple_canonical_type_hash): Use param to size hash table.
>         (gimple_register_canonical_type): dito.
>         * lto/lto.c (read_cgraph_and_symbols): dito.
>         * params.def (PARAM_TYPE_CACHE_HASH_SIZE, 
> PARAM_CANONICAL_TYPE_HASH_SIZE,
>         PARAM_CANONICAL_TYPE_CACHE_HASH_SIZE, PARAM_GIMPLE_TYPE_HASH_SIZE): 
> Add.
> ---
>  gcc/gimple.c   |  9 ++++++---
>  gcc/lto/lto.c  |  7 +++++--
>  gcc/params.def | 20 ++++++++++++++++++++
>  3 files changed, 31 insertions(+), 5 deletions(-)
>
> diff --git a/gcc/gimple.c b/gcc/gimple.c
> index 64f7b1a..2777816 100644
> --- a/gcc/gimple.c
> +++ b/gcc/gimple.c
> @@ -36,6 +36,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "alias.h"
>  #include "demangle.h"
>  #include "langhooks.h"
> +#include "params.h"
>
>  /* Global canonical type table.  */
>  static GTY((if_marked ("ggc_marked_p"), param_is (union tree_node)))
> @@ -3173,8 +3174,9 @@ static hashval_t
>  gimple_canonical_type_hash (const void *p)
>  {
>    if (canonical_type_hash_cache == NULL)
> -    canonical_type_hash_cache = htab_create_ggc (512, tree_int_map_hash,
> -                                                tree_int_map_eq, NULL);
> +      canonical_type_hash_cache = htab_create_ggc (PARAM_VALUE 
> (PARAM_CANONICAL_TYPE_CACHE_HASH_SIZE),
> +                                                  tree_int_map_hash,
> +                                                  tree_int_map_eq, NULL);
>
>    return iterative_hash_canonical_type (CONST_CAST_TREE ((const_tree) p), 0);
>  }
> @@ -3429,7 +3431,8 @@ gimple_register_canonical_type (tree t)
>      return TYPE_CANONICAL (t);
>
>    if (gimple_canonical_types == NULL)
> -    gimple_canonical_types = htab_create_ggc (16381, 
> gimple_canonical_type_hash,
> +    gimple_canonical_types = htab_create_ggc (PARAM_VALUE 
> (PARAM_CANONICAL_TYPE_HASH_SIZE),
> +                                             gimple_canonical_type_hash,
>                                               gimple_canonical_type_eq, 0);
>
>    slot = htab_find_slot (gimple_canonical_types, t, INSERT);
> diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
> index d757be0..4aaf2dc 100644
> --- a/gcc/lto/lto.c
> +++ b/gcc/lto/lto.c
> @@ -38,6 +38,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "ipa-prop.h"
>  #include "common.h"
>  #include "debug.h"
> +#include "params.h"
>  #include "gimple.h"
>  #include "lto.h"
>  #include "lto-tree.h"
> @@ -2947,12 +2948,14 @@ read_cgraph_and_symbols (unsigned nfiles, const char 
> **fnames)
>
>    tree_with_vars = htab_create_ggc (101, htab_hash_pointer, htab_eq_pointer,
>                                     NULL);
> -  type_hash_cache = htab_create_ggc (512, tree_int_map_hash,
> +  type_hash_cache = htab_create_ggc (PARAM_VALUE 
> (PARAM_TYPE_CACHE_HASH_SIZE),
> +                                    tree_int_map_hash,
>                                      tree_int_map_eq, NULL);
>    type_pair_cache = XCNEWVEC (struct type_pair_d, GIMPLE_TYPE_PAIR_SIZE);
>    gimple_type_leader = ggc_alloc_cleared_vec_gimple_type_leader_entry_s
>                         (GIMPLE_TYPE_LEADER_SIZE);
> -  gimple_types = htab_create_ggc (16381, gimple_type_hash, gimple_type_eq, 
> 0);
> +  gimple_types = htab_create_ggc (PARAM_VALUE (PARAM_GIMPLE_TYPE_HASH_SIZE),
> +                                 gimple_type_hash, gimple_type_eq, 0);
>
>    if (!quiet_flag)
>      fprintf (stderr, "Reading object files:");
> diff --git a/gcc/params.def b/gcc/params.def
> index 3c52651..46843df 100644
> --- a/gcc/params.def
> +++ b/gcc/params.def
> @@ -1020,6 +1020,26 @@ DEFPARAM (PARAM_MAX_SLSR_CANDIDATE_SCAN,
>           "strength reduction",
>           50, 1, 999999)
>
> +DEFPARAM (PARAM_TYPE_CACHE_HASH_SIZE,
> +       "type-cache-hash-size",
> +       "Initial size of the gimple type cache hash table",
> +       512, 512, 0)
> +
> +DEFPARAM (PARAM_CANONICAL_TYPE_HASH_SIZE,
> +       "canonical-type-hash-size",
> +       "Initial size of the gimple canonical type hash table",
> +       16381, 16381, 0)
> +
> +DEFPARAM (PARAM_CANONICAL_TYPE_CACHE_HASH_SIZE,
> +       "canonical-type-cache-hash-size",
> +       "Initial size of the gimple canonical type cache hash table",
> +       512, 512, 0)
> +
> +DEFPARAM (PARAM_GIMPLE_TYPE_HASH_SIZE,
> +       "type-hash-size",
> +       "Initial size of the gimple type hash table",
> +       16381, 16381, 0)
> +
>  /*
>  Local variables:
>  mode:c
> --
> 1.8.1.4
>

Reply via email to