Re: [PATCH 11/35] Change use to type-based pool allocator in sh.c.

2015-05-29 Thread Martin Liška

On 05/27/2015 07:59 PM, Jeff Law wrote:

On 05/27/2015 07:56 AM, mliska wrote:

gcc/ChangeLog:

2015-04-30  Martin Liska  mli...@suse.cz

* config/sh/sh.c (add_constant):Use new type-based pool allocator.
(sh_reorg) Likewise.

OK.
jeff



v2
From 68f0b72993d882d5dfe4096806f2bb78c87a37c4 Mon Sep 17 00:00:00 2001
From: mliska mli...@suse.cz
Date: Wed, 27 May 2015 15:56:47 +0200
Subject: [PATCH 10/32] Change use to type-based pool allocator in sh.c.

gcc/ChangeLog:

2015-04-30  Martin Liska  mli...@suse.cz

	* config/sh/sh.c (add_constant):Use new type-based pool allocator.
	(sh_reorg) Likewise.
---
 gcc/config/sh/sh.c | 30 ++
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index bc1ce24..285aa18 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -4648,14 +4648,31 @@ gen_datalabel_ref (rtx sym)
 }
 
 
-static alloc_pool label_ref_list_pool;
-
 typedef struct label_ref_list_d
 {
   rtx_code_label *label;
   struct label_ref_list_d *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 ((label_ref_list_d *) ptr);
+  }
+
+  /* Memory allocation pool.  */
+  static pool_allocatorlabel_ref_list_d pool;
+
 } *label_ref_list_t;
 
+pool_allocatorlabel_ref_list_d label_ref_list_d::pool
+  (label references list, 30);
+
 /* The SH cannot load a large constant into a register, constants have to
come from a pc relative load.  The reference of a pc relative load
instruction must be less than 1k in front of the instruction.  This
@@ -4775,7 +4792,7 @@ add_constant (rtx x, machine_mode mode, rtx last_value)
 		}
 	  if (lab  pool_window_label)
 		{
-		  newref = (label_ref_list_t) pool_alloc (label_ref_list_pool);
+		  newref = new label_ref_list_d;
 		  newref-label = pool_window_label;
 		  ref = pool_vector[pool_window_last].wend;
 		  newref-next = ref;
@@ -4804,7 +4821,7 @@ add_constant (rtx x, machine_mode mode, rtx last_value)
   pool_vector[pool_size].part_of_sequence_p = (lab == 0);
   if (lab  pool_window_label)
 {
-  newref = (label_ref_list_t) pool_alloc (label_ref_list_pool);
+  newref = new label_ref_list_d;
   newref-label = pool_window_label;
   ref = pool_vector[pool_window_last].wend;
   newref-next = ref;
@@ -6359,9 +6376,6 @@ sh_reorg (void)
 
   /* Scan the function looking for move instructions which have to be
  changed to pc-relative loads and insert the literal tables.  */
-  label_ref_list_pool = create_alloc_pool (label references list,
-	   sizeof (struct label_ref_list_d),
-	   30);
   mdep_reorg_phase = SH_FIXUP_PCLOAD;
   for (insn = first, num_mova = 0; insn; insn = NEXT_INSN (insn))
 {
@@ -6553,7 +6567,7 @@ sh_reorg (void)
 	  insn = barrier;
 	}
 }
-  free_alloc_pool (label_ref_list_pool);
+  label_ref_list_d::pool.release ();
   for (insn = first; insn; insn = NEXT_INSN (insn))
 PUT_MODE (insn, VOIDmode);
 
-- 
2.1.4



Re: [PATCH 11/35] Change use to type-based pool allocator in sh.c.

2015-05-27 Thread Jeff Law

On 05/27/2015 07:56 AM, mliska wrote:

gcc/ChangeLog:

2015-04-30  Martin Liska  mli...@suse.cz

* config/sh/sh.c (add_constant):Use new type-based pool allocator.
(sh_reorg) Likewise.

OK.
jeff