convert trans-mem to hash_table
authorTrevor Saunders <tsaunders@mozilla.com>
Thu, 20 Nov 2014 15:10:56 +0000 (15:10 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Thu, 20 Nov 2014 15:10:56 +0000 (15:10 +0000)
gcc/

* cfgexpand.c, gimple-ssa.h, trans-mem.c: Replace htab with
hash_table.

From-SVN: r217872

gcc/ChangeLog
gcc/cfgexpand.c
gcc/gimple-ssa.h
gcc/trans-mem.c

index 8c70fadd2a88dc6ebb5324a73c58e765fe1a4ca5..327a5c5f2ce14e6610a15891cb35a517f9e9186a 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-20  Trevor Saunders  <tsaunders@mozilla.com>
+
+       * cfgexpand.c, gimple-ssa.h, trans-mem.c: Replace htab with
+       hash_table.
+
 2014-11-20  Trevor Saunders  <tsaunders@mozilla.com>
 
        * ipa-utils.c, lto-section-in.c, lto-streamer.h,
index f61140e2f72120c04e67de9bb0039a32f7733904..8cdf5853a7066822145fdc14759357659b562b2f 100644 (file)
@@ -2234,16 +2234,16 @@ static void
 mark_transaction_restart_calls (gimple stmt)
 {
   struct tm_restart_node dummy;
-  void **slot;
+  tm_restart_node **slot;
 
   if (!cfun->gimple_df->tm_restart)
     return;
 
   dummy.stmt = stmt;
-  slot = htab_find_slot (cfun->gimple_df->tm_restart, &dummy, NO_INSERT);
+  slot = cfun->gimple_df->tm_restart->find_slot (&dummy, NO_INSERT);
   if (slot)
     {
-      struct tm_restart_node *n = (struct tm_restart_node *) *slot;
+      struct tm_restart_node *n = *slot;
       tree list = n->label_or_list;
       rtx_insn *insn;
 
@@ -6062,10 +6062,7 @@ pass_expand::execute (function *fun)
 
   /* After expanding, the tm_restart map is no longer needed.  */
   if (fun->gimple_df->tm_restart)
-    {
-      htab_delete (fun->gimple_df->tm_restart);
-      fun->gimple_df->tm_restart = NULL;
-    }
+    fun->gimple_df->tm_restart = NULL;
 
   /* Tag the blocks with a depth number so that change_scope can find
      the common parent easily.  */
index c0239561787fe94843217a06a34a8d544976b96d..9bdb23315d051233bcd72fa7d0c266c40fafe2df 100644 (file)
@@ -28,11 +28,24 @@ along with GCC; see the file COPYING3.  If not see
 /* This structure is used to map a gimple statement to a label,
    or list of labels to represent transaction restart.  */
 
-struct GTY(()) tm_restart_node {
+struct GTY((for_user)) tm_restart_node {
   gimple stmt;
   tree label_or_list;
 };
 
+/* Hasher for tm_restart_node.  */
+
+struct tm_restart_hasher : ggc_hasher<tm_restart_node *>
+{
+  static hashval_t hash (tm_restart_node *n) { return htab_hash_pointer (n); }
+
+  static bool
+  equal (tm_restart_node *a, tm_restart_node *b)
+  {
+    return a == b;
+  }
+};
+
 struct ssa_name_hasher : ggc_hasher<tree>
 {
   /* Hash a tree in a uid_decl_map.  */
@@ -101,7 +114,7 @@ struct GTY(()) gimple_df {
 
   /* Map gimple stmt to tree label (or list of labels) for transaction
      restart and abort.  */
-  htab_t GTY ((param_is (struct tm_restart_node))) tm_restart;
+  hash_table<tm_restart_hasher> *tm_restart;
 };
 
 
index a7de3e60f2f3f122d01fade27c2ea331d2288c54..51f79a204df18d81ce83e698dff4f81a310004f9 100644 (file)
@@ -3109,15 +3109,16 @@ split_bb_make_tm_edge (gimple stmt, basic_block dest_bb,
 
   // Record the need for the edge for the benefit of the rtl passes.
   if (cfun->gimple_df->tm_restart == NULL)
-    cfun->gimple_df->tm_restart = htab_create_ggc (31, struct_ptr_hash,
-                                                  struct_ptr_eq, ggc_free);
+    cfun->gimple_df->tm_restart
+      = hash_table<tm_restart_hasher>::create_ggc (31);
 
   struct tm_restart_node dummy;
   dummy.stmt = stmt;
   dummy.label_or_list = gimple_block_label (dest_bb);
 
-  void **slot = htab_find_slot (cfun->gimple_df->tm_restart, &dummy, INSERT);
-  struct tm_restart_node *n = (struct tm_restart_node *) *slot;
+  tm_restart_node **slot = cfun->gimple_df->tm_restart->find_slot (&dummy,
+                                                                  INSERT);
+  struct tm_restart_node *n = *slot;
   if (n == NULL)
     {
       n = ggc_alloc<tm_restart_node> ();
@@ -3196,7 +3197,7 @@ expand_block_edges (struct tm_region *const region, basic_block bb)
 
       if (cfun->gimple_df->tm_restart == NULL)
        cfun->gimple_df->tm_restart
-         = htab_create_ggc (31, struct_ptr_hash, struct_ptr_eq, ggc_free);
+         = hash_table<tm_restart_hasher>::create_ggc (31);
 
       // All TM builtins have an abnormal edge to the outer-most transaction.
       // We never restart inner transactions.