diff mbox

[33/35] Change use to type-based pool allocator in ira-color.c.

Message ID 27d56fd7847e4cf0f81b87885088235b564534e4.1432735040.git.mliska@suse.cz
State New
Headers show

Commit Message

Martin Liška May 27, 2015, 1:56 p.m. UTC
gcc/ChangeLog:

2015-04-30  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.
---
 gcc/ira-color.c | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

Comments

Jeff Law May 27, 2015, 6:17 p.m. UTC | #1
On 05/27/2015 07:56 AM, mliska wrote:
> gcc/ChangeLog:
>
> 2015-04-30  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.
OK.
Jeff
Trevor Saunders May 29, 2015, 2:03 a.m. UTC | #2
On Thu, May 28, 2015 at 06:42:57AM -0400, David Malcolm wrote:
> On Wed, 2015-05-27 at 15:56 +0200, mliska wrote:
> > gcc/ChangeLog:
> > 
> > 2015-04-30  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.
> > ---
> >  gcc/ira-color.c | 19 +++++--------------
> >  1 file changed, 5 insertions(+), 14 deletions(-)
> > 
> > diff --git a/gcc/ira-color.c b/gcc/ira-color.c
> > index 4750714..4aec98e 100644
> > --- a/gcc/ira-color.c
> > +++ b/gcc/ira-color.c
> > @@ -1166,16 +1166,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);
> 
> Am I right in thinking that this is a statically-allocated object with a
> non-trivial constructor?  i.e. that this constructor has to run before
> "main" is entered?

yes though I think it'd be pretty easy to make it basically trivial but
with a static initializer because gcc doesn't optimize them well, and
with a bit more work we could probably get rid of the static initializer
without actually fixing gcc.

> Do our coding guidelines allow for this?  (I've been burned by this
> before, on a buggy C++ runtime that didn't manage to support these).

I'm pretty sure there already are some iirc the pretty printers are one
example.

> I'm a little nervous about this, touching global state before
> "main" (e.g. from the point-of-view of the JIT), though I don't know yet
> if this is just a gut reaction, or if there's a valid concern here (I'm

afaik it should work fine.  Of course this is global data which isn't
great, but that's a preexisting problem.

Trev
diff mbox

Patch

diff --git a/gcc/ira-color.c b/gcc/ira-color.c
index 4750714..4aec98e 100644
--- a/gcc/ira-color.c
+++ b/gcc/ira-color.c
@@ -1166,16 +1166,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 +1176,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 +1192,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 +1201,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 +1256,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.  */