Message ID | 27d56fd7847e4cf0f81b87885088235b564534e4.1432735040.git.mliska@suse.cz |
---|---|
State | New |
Headers | show |
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
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 --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. */