On Thu, Oct 10, 2019 at 9:25 PM Jan Hubicka <hubi...@ucw.cz> wrote: > > Hi, > ipa-reference uses splay tree to map DECL_UIDs to trees. On other > places we use hash-maps which are more sutiable.
A simple hash-table/jhash-set does it as well if the UID is the same as DECL_UID. You can use the tree_decl_hash hash-traits for that. decl lookup can then be done like tree_decl_minimal d; d.uid = uid; find_slot_with_hash (&d, uid) or so. There must be existing users that got converted from old-style hashes to new templated ones but I can't find them right now :/ Richard. > Bootstrapped/regtested x86_64-linux, comitted. > > Honza > * ipa-reference.c: Do not include splay-tree.h > (reference_vars_to_consider): Turn to hash map. > (get_static_name, ipa_init, analyze_function, propagate, > stream_out_bitmap, ipa_reference_write_optimization_summary, > ipa_reference_write_optimization_summary): Update. > Index: ipa-reference.c > =================================================================== > --- ipa-reference.c (revision 276849) > +++ ipa-reference.c (working copy) > @@ -46,7 +46,6 @@ along with GCC; see the file COPYING3. > #include "cgraph.h" > #include "data-streamer.h" > #include "calls.h" > -#include "splay-tree.h" > #include "ipa-utils.h" > #include "ipa-reference.h" > #include "symbol-summary.h" > @@ -92,9 +91,11 @@ struct ipa_reference_vars_info_d > > typedef struct ipa_reference_vars_info_d *ipa_reference_vars_info_t; > > -/* This splay tree contains all of the static variables that are > +/* This map contains all of the static variables that are > being considered by the compilation level alias analysis. */ > -static splay_tree reference_vars_to_consider; > +typedef hash_map<int_hash <unsigned int, -1U>, tree> > + reference_vars_to_consider_t; > +static reference_vars_to_consider_t *reference_vars_to_consider; > > /* Set of all interesting module statics. A bit is set for every module > static we are considering. This is added to the local info when asm > @@ -272,9 +273,7 @@ is_proper_for_analysis (tree t) > static const char * > get_static_name (int index) > { > - splay_tree_node stn = > - splay_tree_lookup (reference_vars_to_consider, index); > - return fndecl_name ((tree)(stn->value)); > + return fndecl_name (*reference_vars_to_consider->get (index)); > } > > /* Dump a set of static vars to FILE. */ > @@ -416,7 +415,7 @@ ipa_init (void) > ipa_init_p = true; > > if (dump_file) > - reference_vars_to_consider = splay_tree_new (splay_tree_compare_ints, 0, > 0); > + reference_vars_to_consider = new reference_vars_to_consider_t(251); > > bitmap_obstack_initialize (&local_info_obstack); > bitmap_obstack_initialize (&optimization_summary_obstack); > @@ -476,9 +475,8 @@ analyze_function (struct cgraph_node *fn > && bitmap_set_bit (all_module_statics, ipa_reference_var_uid (var))) > { > if (dump_file) > - splay_tree_insert (reference_vars_to_consider, > - ipa_reference_var_uid (var), > - (splay_tree_value)var); > + reference_vars_to_consider->put (ipa_reference_var_uid (var), > + var); > } > switch (ref->use) > { > @@ -898,7 +896,7 @@ propagate (void) > } > > if (dump_file) > - splay_tree_delete (reference_vars_to_consider); > + delete reference_vars_to_consider; > reference_vars_to_consider = NULL; > return remove_p ? TODO_remove_functions : 0; > } > @@ -968,8 +966,7 @@ stream_out_bitmap (struct lto_simple_out > return; > EXECUTE_IF_AND_IN_BITMAP (bits, ltrans_statics, 0, index, bi) > { > - tree decl = (tree)splay_tree_lookup (reference_vars_to_consider, > - index)->value; > + tree decl = *reference_vars_to_consider->get (index); > lto_output_var_decl_index (ob->decl_state, ob->main_stream, decl); > } > } > @@ -987,7 +984,7 @@ ipa_reference_write_optimization_summary > auto_bitmap ltrans_statics; > int i; > > - reference_vars_to_consider = splay_tree_new (splay_tree_compare_ints, 0, > 0); > + reference_vars_to_consider = new reference_vars_to_consider_t (251); > > /* See what variables we are interested in. */ > for (i = 0; i < lto_symtab_encoder_size (encoder); i++) > @@ -1001,9 +998,8 @@ ipa_reference_write_optimization_summary > { > tree decl = vnode->decl; > bitmap_set_bit (ltrans_statics, ipa_reference_var_uid (decl)); > - splay_tree_insert (reference_vars_to_consider, > - ipa_reference_var_uid (decl), > - (splay_tree_value)decl); > + reference_vars_to_consider->put > + (ipa_reference_var_uid (decl), decl); > ltrans_statics_bitcount ++; > } > } > @@ -1045,7 +1041,7 @@ ipa_reference_write_optimization_summary > } > } > lto_destroy_simple_output_block (ob); > - splay_tree_delete (reference_vars_to_consider); > + delete reference_vars_to_consider; > } > > /* Deserialize the ipa info for lto. */