Change use to type-based pool allocator in ira-color.c.

* 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
This commit is contained in:
Martin Liska 2015-06-01 14:36:01 +02:00 committed by Martin Liska
parent 2f77a6072c
commit 8b17d27f76
2 changed files with 28 additions and 14 deletions

View 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.

View 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. */