Change use to type-based pool allocator in ira-color.c.
authorMartin Liska <mliska@suse.cz>
Mon, 1 Jun 2015 12:36:01 +0000 (14:36 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Mon, 1 Jun 2015 12:36:01 +0000 (12:36 +0000)
* ira-color.c (init_update_cost_records):Use new type-based pool allocator.
(get_update_cost_record) Likewise.
(free_update_cost_record_list) Likewise.
(finish_update_cost_records) Likewise.
(initiate_cost_update) Likewise.

From-SVN: r223946

gcc/ChangeLog
gcc/ira-color.c

index 10b6a107b6ab83680285e820e55e7f6121118d6e..d23503d0c03e411db901f3468a9c245ba8e4ed15 100644 (file)
@@ -1,3 +1,11 @@
+2015-06-01  Martin Liska  <mliska@suse.cz>
+
+       * ira-color.c (init_update_cost_records):Use new type-based pool allocator.
+       (get_update_cost_record) Likewise.
+       (free_update_cost_record_list) Likewise.
+       (finish_update_cost_records) Likewise.
+       (initiate_cost_update) Likewise.
+
 2015-06-01  Martin Liska  <mliska@suse.cz>
 
        * lra.c (init_insn_regs): Use new type-based pool allocator.
index 4750714d78d074bd12e01ca3b2afc9de6a4cd523..543440d919bbe62aa41709b1e9e184a6cf0c71b8 100644 (file)
@@ -123,6 +123,21 @@ struct update_cost_record
   int divisor;
   /* Next record for given allocno.  */
   struct update_cost_record *next;
+
+  /* Pool allocation new operator.  */
+  inline void *operator new (size_t)
+  {
+    return pool.allocate ();
+  }
+
+  /* Delete operator utilizing pool allocation.  */
+  inline void operator delete (void *ptr)
+  {
+    pool.remove ((update_cost_record *) ptr);
+  }
+
+  /* Memory allocation pool.  */
+  static pool_allocator<update_cost_record> pool;
 };
 
 /* To decrease footprint of ira_allocno structure we store all data
@@ -1166,16 +1181,8 @@ setup_profitable_hard_regs (void)
    allocnos.  */
 
 /* Pool for update cost records.  */
-static alloc_pool update_cost_record_pool;
-
-/* Initiate update cost records.  */
-static void
-init_update_cost_records (void)
-{
-  update_cost_record_pool
-    = create_alloc_pool ("update cost records",
-                        sizeof (struct update_cost_record), 100);
-}
+static pool_allocator<update_cost_record> update_cost_record_pool
+  ("update cost records", 100);
 
 /* Return new update cost record with given params.  */
 static struct update_cost_record *
@@ -1184,7 +1191,7 @@ get_update_cost_record (int hard_regno, int divisor,
 {
   struct update_cost_record *record;
 
-  record = (struct update_cost_record *) pool_alloc (update_cost_record_pool);
+  record = update_cost_record_pool.allocate ();
   record->hard_regno = hard_regno;
   record->divisor = divisor;
   record->next = next;
@@ -1200,7 +1207,7 @@ free_update_cost_record_list (struct update_cost_record *list)
   while (list != NULL)
     {
       next = list->next;
-      pool_free (update_cost_record_pool, list);
+      update_cost_record_pool.remove (list);
       list = next;
     }
 }
@@ -1209,7 +1216,7 @@ free_update_cost_record_list (struct update_cost_record *list)
 static void
 finish_update_cost_records (void)
 {
-  free_alloc_pool (update_cost_record_pool);
+  update_cost_record_pool.release ();
 }
 
 /* Array whose element value is TRUE if the corresponding hard
@@ -1264,7 +1271,6 @@ initiate_cost_update (void)
     = (struct update_cost_queue_elem *) ira_allocate (size);
   memset (update_cost_queue_elems, 0, size);
   update_cost_check = 0;
-  init_update_cost_records ();
 }
 
 /* Deallocate data used by function update_costs_from_copies.  */