cfganal.c (pre_and_rev_post_order_compute_fn): Use an auto_bb_flag instead of an...
authorRichard Biener <rguenther@suse.de>
Thu, 21 Nov 2019 08:39:53 +0000 (08:39 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 21 Nov 2019 08:39:53 +0000 (08:39 +0000)
2019-11-21  Richard Biener  <rguenther@suse.de>

* cfganal.c (pre_and_rev_post_order_compute_fn): Use an
auto_bb_flag instead of an sbitmap for visited handling.
* lra.c (lra_insn_recog_data_pool): New.
(free_insn_recog_data): Adjust.
(finish_insn_recog_data): Release lra_insn_recog_data_pool.
(lra_set_insn_recog_data): Allocate from lra_insn_recog_data_pool.
* tree-ssa-structalias.c (equiv_class_hasher): Change to nofree.
(equiv_class_obstack): New.
(equiv_class_lookup_or_add): Allocate from equiv_class_obstack.
(perform_var_substitution): Initialize equiv_class_obstack.
(free_var_substitution_info): Free equiv_class_obstack.

From-SVN: r278543

gcc/ChangeLog
gcc/tree-ssa-structalias.c

index 904b54c..a669c28 100644 (file)
@@ -1,3 +1,11 @@
+2019-11-21  Richard Biener  <rguenther@suse.de>
+
+       * tree-ssa-structalias.c (equiv_class_hasher): Change to nofree.
+       (equiv_class_obstack): New.
+       (equiv_class_lookup_or_add): Allocate from equiv_class_obstack.
+       (perform_var_substitution): Initialize equiv_class_obstack.
+       (free_var_substitution_info): Free equiv_class_obstack.
+
 2019-11-20  Jan Hubicka  <jh@suse.cz>
 
        * ipa-inline.c (want_early_inline_function_p): Do not estimate
index 68298ea..f7a17eb 100644 (file)
@@ -1911,7 +1911,7 @@ typedef const struct equiv_class_label *const_equiv_class_label_t;
 
 /* Equiv_class_label hashtable helpers.  */
 
-struct equiv_class_hasher : free_ptr_hash <equiv_class_label>
+struct equiv_class_hasher : nofree_ptr_hash <equiv_class_label>
 {
   static inline hashval_t hash (const equiv_class_label *);
   static inline bool equal (const equiv_class_label *,
@@ -1944,6 +1944,8 @@ static hash_table<equiv_class_hasher> *pointer_equiv_class_table;
    classes.  */
 static hash_table<equiv_class_hasher> *location_equiv_class_table;
 
+struct obstack equiv_class_obstack;
+
 /* Lookup a equivalence class in TABLE by the bitmap of LABELS with
    hash HAS it contains.  Sets *REF_LABELS to the bitmap LABELS
    is equivalent to.  */
@@ -1960,7 +1962,7 @@ equiv_class_lookup_or_add (hash_table<equiv_class_hasher> *table,
   slot = table->find_slot (&ecl, INSERT);
   if (!*slot)
     {
-      *slot = XNEW (struct equiv_class_label);
+      *slot = XOBNEW (&equiv_class_obstack, struct equiv_class_label);
       (*slot)->labels = labels;
       (*slot)->hashcode = ecl.hashcode;
       (*slot)->equivalence_class = 0;
@@ -2334,6 +2336,7 @@ perform_var_substitution (constraint_graph_t graph)
   scc_info *si = new scc_info (size);
 
   bitmap_obstack_initialize (&iteration_obstack);
+  gcc_obstack_init (&equiv_class_obstack);
   pointer_equiv_class_table = new hash_table<equiv_class_hasher> (511);
   location_equiv_class_table
     = new hash_table<equiv_class_hasher> (511);
@@ -2473,6 +2476,7 @@ free_var_substitution_info (class scc_info *si)
   pointer_equiv_class_table = NULL;
   delete location_equiv_class_table;
   location_equiv_class_table = NULL;
+  obstack_free (&equiv_class_obstack, NULL);
   bitmap_obstack_release (&iteration_obstack);
 }