diff mbox series

Remove splay tree form ipa-reference.c

Message ID 20191010192523.jg3tkhvqvkoy6slx@kam.mff.cuni.cz
State New
Headers show
Series Remove splay tree form ipa-reference.c | expand

Commit Message

Jan Hubicka Oct. 10, 2019, 7:25 p.m. UTC
Hi,
ipa-reference uses splay tree to map DECL_UIDs to trees.  On other
places we use hash-maps which are more sutiable.

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.

Comments

Richard Biener Oct. 11, 2019, 11:17 a.m. UTC | #1
On Thu, Oct 10, 2019 at 9:25 PM Jan Hubicka <hubicka@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.  */
diff mbox series

Patch

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.  */