From 5c7337c58f152e35a823cc51228efa4b06c06618 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Mon, 1 Jun 2015 14:44:44 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/regcprop.c | 31 +++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ca520ccc68d..678157e49e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-06-01 Martin Liska + + * 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 * ira-build.c (initiate_cost_vectors): Use new type-based pool allocator. diff --git a/gcc/regcprop.c b/gcc/regcprop.c index 7d7a9a09c20..9bac11ac6a8 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 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::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); -- 2.30.2