summaryrefslogtreecommitdiff
path: root/gcc/dse.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/dse.c')
-rw-r--r--gcc/dse.c124
1 files changed, 27 insertions, 97 deletions
diff --git a/gcc/dse.c b/gcc/dse.c
index 339fb2df273..ff26fc0cb05 100644
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -308,10 +308,10 @@ lowpart_bitmask (int n)
}
typedef struct store_info *store_info_t;
-static pool_allocator<store_info> cse_store_info_pool ("cse_store_info_pool",
+static object_allocator<store_info> cse_store_info_pool ("cse_store_info_pool",
100);
-static pool_allocator<store_info> rtx_store_info_pool ("rtx_store_info_pool",
+static object_allocator<store_info> rtx_store_info_pool ("rtx_store_info_pool",
100);
/* This structure holds information about a load. These are only
@@ -334,25 +334,11 @@ struct read_info_type
/* The next read_info for this insn. */
struct read_info_type *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 ((read_info_type *) ptr);
- }
-
- /* Memory allocation pool. */
- static pool_allocator<read_info_type> pool;
};
typedef struct read_info_type *read_info_t;
-pool_allocator<read_info_type> read_info_type::pool ("read_info_pool", 100);
+static object_allocator<read_info_type> read_info_type_pool
+ ("read_info_pool", 100);
/* One of these records is created for each insn. */
@@ -438,25 +424,11 @@ struct insn_info_type
time it is guaranteed to be correct is when the traversal starts
at active_local_stores. */
struct insn_info_type * next_local_store;
-
- /* 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 ((insn_info_type *) ptr);
- }
-
- /* Memory allocation pool. */
- static pool_allocator<insn_info_type> pool;
};
typedef struct insn_info_type *insn_info_t;
-pool_allocator<insn_info_type> insn_info_type::pool ("insn_info_pool", 100);
+static object_allocator<insn_info_type> insn_info_type_pool
+ ("insn_info_pool", 100);
/* The linked list of stores that are under consideration in this
basic block. */
@@ -518,25 +490,12 @@ struct dse_bb_info_type
to assure that shift and/or add sequences that are inserted do not
accidentally clobber live hard regs. */
bitmap regs_live;
-
- /* 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 ((dse_bb_info_type *) ptr);
- }
-
- /* Memory allocation pool. */
- static pool_allocator<dse_bb_info_type> pool;
};
typedef struct dse_bb_info_type *bb_info_t;
-pool_allocator<dse_bb_info_type> dse_bb_info_type::pool ("bb_info_pool", 100);
+
+static object_allocator<dse_bb_info_type> dse_bb_info_type_pool
+ ("bb_info_pool", 100);
/* Table to hold all bb_infos. */
static bb_info_t *bb_table;
@@ -604,26 +563,12 @@ struct group_info
care about. */
int *offset_map_n, *offset_map_p;
int offset_map_size_n, offset_map_size_p;
-
- /* 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 ((group_info *) ptr);
- }
-
- /* Memory allocation pool. */
- static pool_allocator<group_info> pool;
};
typedef struct group_info *group_info_t;
typedef const struct group_info *const_group_info_t;
-pool_allocator<group_info> group_info::pool ("rtx_group_info_pool", 100);
+static object_allocator<group_info> group_info_pool
+ ("rtx_group_info_pool", 100);
/* Index into the rtx_group_vec. */
static int rtx_group_next_id;
@@ -644,26 +589,11 @@ struct deferred_change
rtx reg;
struct deferred_change *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 ((deferred_change *) ptr);
- }
-
- /* Memory allocation pool. */
- static pool_allocator<deferred_change> pool;
};
typedef struct deferred_change *deferred_change_t;
-pool_allocator<deferred_change> deferred_change::pool
+static object_allocator<deferred_change> deferred_change_pool
("deferred_change_pool", 10);
static deferred_change_t deferred_change_list = NULL;
@@ -769,7 +699,7 @@ get_group_info (rtx base)
{
if (!clear_alias_group)
{
- clear_alias_group = gi = new group_info;
+ clear_alias_group = gi = group_info_pool.allocate ();
memset (gi, 0, sizeof (struct group_info));
gi->id = rtx_group_next_id++;
gi->store1_n = BITMAP_ALLOC (&dse_bitmap_obstack);
@@ -791,7 +721,7 @@ get_group_info (rtx base)
if (gi == NULL)
{
- *slot = gi = new group_info;
+ *slot = gi = group_info_pool.allocate ();
gi->rtx_base = base;
gi->id = rtx_group_next_id++;
gi->base_mem = gen_rtx_MEM (BLKmode, base);
@@ -1027,7 +957,7 @@ delete_dead_store_insn (insn_info_t insn_info)
while (read_info)
{
read_info_t next = read_info->next;
- delete read_info;
+ read_info_type_pool.remove (read_info);
read_info = next;
}
insn_info->read_rec = NULL;
@@ -1151,7 +1081,7 @@ free_read_records (bb_info_t bb_info)
read_info_t next = (*ptr)->next;
if ((*ptr)->alias_set == 0)
{
- delete *ptr;
+ read_info_type_pool.remove (*ptr);
*ptr = next;
}
else
@@ -2099,7 +2029,7 @@ replace_read (store_info_t store_info, insn_info_t store_insn,
if (validate_change (read_insn->insn, loc, read_reg, 0))
{
- deferred_change_t change = new deferred_change;
+ deferred_change_t change = deferred_change_pool.allocate ();
/* Insert this right before the store insn where it will be safe
from later insns that might change it before the read. */
@@ -2137,7 +2067,7 @@ replace_read (store_info_t store_info, insn_info_t store_insn,
/* Get rid of the read_info, from the point of view of the
rest of dse, play like this read never happened. */
read_insn->read_rec = read_info->next;
- delete read_info;
+ read_info_type_pool.remove (read_info);
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, " -- replaced the loaded MEM with ");
@@ -2203,7 +2133,7 @@ check_mem_read_rtx (rtx *loc, bb_info_t bb_info)
else
width = GET_MODE_SIZE (GET_MODE (mem));
- read_info = new read_info_type;
+ read_info = read_info_type_pool.allocate ();
read_info->group_id = group_id;
read_info->mem = mem;
read_info->alias_set = spill_alias_set;
@@ -2519,7 +2449,7 @@ static void
scan_insn (bb_info_t bb_info, rtx_insn *insn)
{
rtx body;
- insn_info_type *insn_info = new insn_info_type;
+ insn_info_type *insn_info = insn_info_type_pool.allocate ();
int mems_found = 0;
memset (insn_info, 0, sizeof (struct insn_info_type));
@@ -2778,7 +2708,7 @@ dse_step1 (void)
FOR_ALL_BB_FN (bb, cfun)
{
insn_info_t ptr;
- bb_info_t bb_info = new dse_bb_info_type;
+ bb_info_t bb_info = dse_bb_info_type_pool.allocate ();
memset (bb_info, 0, sizeof (dse_bb_info_type));
bitmap_set_bit (all_blocks, bb->index);
@@ -2855,7 +2785,7 @@ dse_step1 (void)
/* There is no reason to validate this change. That was
done earlier. */
*deferred_change_list->loc = deferred_change_list->reg;
- delete deferred_change_list;
+ deferred_change_pool.remove (deferred_change_list);
deferred_change_list = next;
}
@@ -3740,11 +3670,11 @@ dse_step7 (void)
BITMAP_FREE (scratch);
rtx_store_info_pool.release ();
- read_info_type::pool.release ();
- insn_info_type::pool.release ();
- dse_bb_info_type::pool.release ();
- group_info::pool.release ();
- deferred_change::pool.release ();
+ read_info_type_pool.release ();
+ insn_info_type_pool.release ();
+ dse_bb_info_type_pool.release ();
+ group_info_pool.release ();
+ deferred_change_pool.release ();
}