aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2015-06-01 14:44:44 +0200
committerMartin Liska <marxin@gcc.gnu.org>2015-06-01 12:44:44 +0000
commit5c7337c58f152e35a823cc51228efa4b06c06618 (patch)
treed418960e719b96b4a14ac035e078a0dfad0fda87
parent3599f64ae2483163e83f8626c1d157030227f229 (diff)
downloadgcc-5c7337c58f152e35a823cc51228efa4b06c06618.zip
gcc-5c7337c58f152e35a823cc51228efa4b06c06618.tar.gz
gcc-5c7337c58f152e35a823cc51228efa4b06c06618.tar.bz2
Change use to type-based pool allocator in regcprop.c.
* regcprop.c (free_debug_insn_changes): Use new type-based pool allocator. (replace_oldest_value_reg): Likewise. (pass_cprop_hardreg::execute): Likewise. From-SVN: r223961
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/regcprop.c31
2 files changed, 27 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ca520cc..678157e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2015-06-01 Martin Liska <mliska@suse.cz>
+ * regcprop.c (free_debug_insn_changes): Use new type-based pool allocator.
+ (replace_oldest_value_reg): Likewise.
+ (pass_cprop_hardreg::execute): Likewise.
+
+2015-06-01 Martin Liska <mliska@suse.cz>
+
* ira-build.c (initiate_cost_vectors): Use new type-based pool allocator.
(ira_allocate_cost_vector): Likewise.
(ira_free_cost_vector): Likewise.
diff --git a/gcc/regcprop.c b/gcc/regcprop.c
index 7d7a9a09..9bac11a 100644
--- a/gcc/regcprop.c
+++ b/gcc/regcprop.c
@@ -62,6 +62,21 @@ struct queued_debug_insn_change
rtx_insn *insn;
rtx *loc;
rtx new_rtx;
+
+ /* 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 ((queued_debug_insn_change *) ptr);
+ }
+
+ /* Memory allocation pool. */
+ static pool_allocator<queued_debug_insn_change> pool;
};
/* For each register, we have a list of registers that contain the same
@@ -85,7 +100,9 @@ struct value_data
unsigned int n_debug_insn_changes;
};
-static alloc_pool debug_insn_changes_pool;
+pool_allocator<queued_debug_insn_change> queued_debug_insn_change::pool
+ ("debug insn changes pool", 256);
+
static bool skip_debug_insn_p;
static void kill_value_one_regno (unsigned, struct value_data *);
@@ -124,7 +141,7 @@ free_debug_insn_changes (struct value_data *vd, unsigned int regno)
{
next = cur->next;
--vd->n_debug_insn_changes;
- pool_free (debug_insn_changes_pool, cur);
+ delete cur;
}
vd->e[regno].debug_insn_changes = NULL;
}
@@ -495,8 +512,7 @@ replace_oldest_value_reg (rtx *loc, enum reg_class cl, rtx_insn *insn,
fprintf (dump_file, "debug_insn %u: queued replacing reg %u with %u\n",
INSN_UID (insn), REGNO (*loc), REGNO (new_rtx));
- change = (struct queued_debug_insn_change *)
- pool_alloc (debug_insn_changes_pool);
+ change = new queued_debug_insn_change;
change->next = vd->e[REGNO (new_rtx)].debug_insn_changes;
change->insn = insn;
change->loc = loc;
@@ -1244,11 +1260,6 @@ pass_cprop_hardreg::execute (function *fun)
visited = sbitmap_alloc (last_basic_block_for_fn (fun));
bitmap_clear (visited);
- if (MAY_HAVE_DEBUG_INSNS)
- debug_insn_changes_pool
- = create_alloc_pool ("debug insn changes pool",
- sizeof (struct queued_debug_insn_change), 256);
-
FOR_EACH_BB_FN (bb, fun)
{
bitmap_set_bit (visited, bb->index);
@@ -1308,7 +1319,7 @@ pass_cprop_hardreg::execute (function *fun)
}
}
- free_alloc_pool (debug_insn_changes_pool);
+ queued_debug_insn_change::pool.release ();
}
sbitmap_free (visited);