[PATCH 07/35] Change use to type-based pool allocator in var-tracking.c.
Martin Liška
mliska@suse.cz
Fri May 29 13:34:00 GMT 2015
On 05/27/2015 03:56 PM, mliska wrote:
> gcc/ChangeLog:
>
> 2015-04-30 Martin Liska <mliska@suse.cz>
>
> * var-tracking.c (variable_htab_free):Use new type-based pool allocator.
> (attrs_list_clear) Likewise.
> (attrs_list_insert) Likewise.
> (attrs_list_copy) Likewise.
> (shared_hash_unshare) Likewise.
> (shared_hash_destroy) Likewise.
> (unshare_variable) Likewise.
> (var_reg_delete_and_set) Likewise.
> (var_reg_delete) Likewise.
> (var_regno_delete) Likewise.
> (drop_overlapping_mem_locs) Likewise.
> (variable_union) Likewise.
> (insert_into_intersection) Likewise.
> (canonicalize_values_star) Likewise.
> (variable_merge_over_cur) Likewise.
> (dataflow_set_merge) Likewise.
> (remove_duplicate_values) Likewise.
> (variable_post_merge_new_vals) Likewise.
> (dataflow_set_preserve_mem_locs) Likewise.
> (dataflow_set_remove_mem_locs) Likewise.
> (variable_from_dropped) Likewise.
> (variable_was_changed) Likewise.
> (set_slot_part) Likewise.
> (clobber_slot_part) Likewise.
> (delete_slot_part) Likewise.
> (loc_exp_insert_dep) Likewise.
> (notify_dependents_of_changed_value) Likewise.
> (emit_notes_for_differences_1) Likewise.
> (vt_emit_notes) Likewise.
> (vt_initialize) Likewise.
> (vt_finalize) Likewise.
> ---
> gcc/var-tracking.c | 201 ++++++++++++++++++++++++++++++++---------------------
> 1 file changed, 122 insertions(+), 79 deletions(-)
>
> diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
> index 0db4358..f7afed1 100644
> --- a/gcc/var-tracking.c
> +++ b/gcc/var-tracking.c
> @@ -282,6 +282,21 @@ typedef struct attrs_def
>
> /* Offset from start of DECL. */
> HOST_WIDE_INT offset;
> +
> + /* 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((attrs_def *) ptr);
> + }
> +
> + /* Memory allocation pool. */
> + static pool_allocator<attrs_def> pool;
> } *attrs;
>
> /* Structure for chaining the locations. */
> @@ -298,6 +313,21 @@ typedef struct location_chain_def
>
> /* Initialized? */
> enum var_init_status init;
> +
> + /* 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((location_chain_def *) ptr);
> + }
> +
> + /* Memory allocation pool. */
> + static pool_allocator<location_chain_def> pool;
> } *location_chain;
>
> /* A vector of loc_exp_dep holds the active dependencies of a one-part
> @@ -315,6 +345,21 @@ typedef struct loc_exp_dep_s
> /* A pointer to the pointer to this entry (head or prev's next) in
> the doubly-linked list. */
> struct loc_exp_dep_s **pprev;
> +
> + /* 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((loc_exp_dep_s *) ptr);
> + }
> +
> + /* Memory allocation pool. */
> + static pool_allocator<loc_exp_dep_s> pool;
> } loc_exp_dep;
>
>
> @@ -554,6 +599,21 @@ typedef struct shared_hash_def
>
> /* Actual hash table. */
> variable_table_type *htab;
> +
> + /* 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((shared_hash_def *) ptr);
> + }
> +
> + /* Memory allocation pool. */
> + static pool_allocator<shared_hash_def> pool;
> } *shared_hash;
>
> /* Structure holding the IN or OUT set for a basic block. */
> @@ -598,22 +658,28 @@ typedef struct variable_tracking_info_def
> } *variable_tracking_info;
>
> /* Alloc pool for struct attrs_def. */
> -static alloc_pool attrs_pool;
> +pool_allocator<attrs_def> attrs_def::pool ("attrs_def pool", 1024);
>
> /* Alloc pool for struct variable_def with MAX_VAR_PARTS entries. */
> -static alloc_pool var_pool;
> +
> +static pool_allocator<variable_def> var_pool
> + ("variable_def pool", 64,
> + (MAX_VAR_PARTS - 1) * sizeof (((variable)NULL)->var_part[0]));
>
> /* Alloc pool for struct variable_def with a single var_part entry. */
> -static alloc_pool valvar_pool;
> +static pool_allocator<variable_def> valvar_pool
> + ("small variable_def pool", 256);
>
> /* Alloc pool for struct location_chain_def. */
> -static alloc_pool loc_chain_pool;
> +pool_allocator<location_chain_def> location_chain_def::pool
> + ("location_chain_def pool", 1024);
>
> /* Alloc pool for struct shared_hash_def. */
> -static alloc_pool shared_hash_pool;
> +pool_allocator<shared_hash_def> shared_hash_def::pool
> + ("shared_hash_def pool", 256);
>
> /* Alloc pool for struct loc_exp_dep_s for NOT_ONEPART variables. */
> -static alloc_pool loc_exp_dep_pool;
> +pool_allocator<loc_exp_dep> loc_exp_dep::pool ("loc_exp_dep pool", 64);
>
> /* Changed variables, notes will be emitted for them. */
> static variable_table_type *changed_variables;
> @@ -784,7 +850,7 @@ stack_adjust_offset_pre_post (rtx pattern, HOST_WIDE_INT *pre,
> *post += INTVAL (XEXP (src, 1));
> else
> *post -= INTVAL (XEXP (src, 1));
> - return;
> + return;
> }
> HOST_WIDE_INT res[2] = { 0, 0 };
> for_each_inc_dec (pattern, stack_adjust_offset_pre_post_cb, res);
> @@ -1374,7 +1440,7 @@ dv_onepart_p (decl_or_value dv)
> }
>
> /* Return the variable pool to be used for a dv of type ONEPART. */
> -static inline alloc_pool
> +static inline pool_allocator <variable_def> &
> onepart_pool (onepart_enum_t onepart)
> {
> return onepart ? valvar_pool : var_pool;
> @@ -1457,7 +1523,7 @@ variable_htab_free (void *elem)
> for (node = var->var_part[i].loc_chain; node; node = next)
> {
> next = node->next;
> - pool_free (loc_chain_pool, node);
> + delete node;
> }
> var->var_part[i].loc_chain = NULL;
> }
> @@ -1472,7 +1538,7 @@ variable_htab_free (void *elem)
> if (var->onepart == ONEPART_DEXPR)
> set_dv_changed (var->dv, true);
> }
> - pool_free (onepart_pool (var->onepart), var);
> + onepart_pool (var->onepart).remove (var);
> }
>
> /* Initialize the set (array) SET of attrs to empty lists. */
> @@ -1496,7 +1562,7 @@ attrs_list_clear (attrs *listp)
> for (list = *listp; list; list = next)
> {
> next = list->next;
> - pool_free (attrs_pool, list);
> + delete list;
> }
> *listp = NULL;
> }
> @@ -1518,9 +1584,7 @@ static void
> attrs_list_insert (attrs *listp, decl_or_value dv,
> HOST_WIDE_INT offset, rtx loc)
> {
> - attrs list;
> -
> - list = (attrs) pool_alloc (attrs_pool);
> + attrs list = new attrs_def;
> list->loc = loc;
> list->dv = dv;
> list->offset = offset;
> @@ -1533,12 +1597,10 @@ attrs_list_insert (attrs *listp, decl_or_value dv,
> static void
> attrs_list_copy (attrs *dstp, attrs src)
> {
> - attrs n;
> -
> attrs_list_clear (dstp);
> for (; src; src = src->next)
> {
> - n = (attrs) pool_alloc (attrs_pool);
> + attrs n = new attrs_def;
> n->loc = src->loc;
> n->dv = src->dv;
> n->offset = src->offset;
> @@ -1612,7 +1674,7 @@ shared_var_p (variable var, shared_hash vars)
> static shared_hash
> shared_hash_unshare (shared_hash vars)
> {
> - shared_hash new_vars = (shared_hash) pool_alloc (shared_hash_pool);
> + shared_hash new_vars = new shared_hash_def;
> gcc_assert (vars->refcount > 1);
> new_vars->refcount = 1;
> new_vars->htab = new variable_table_type (vars->htab->elements () + 3);
> @@ -1640,7 +1702,7 @@ shared_hash_destroy (shared_hash vars)
> if (--vars->refcount == 0)
> {
> delete vars->htab;
> - pool_free (shared_hash_pool, vars);
> + delete vars;
> }
> }
>
> @@ -1738,7 +1800,7 @@ unshare_variable (dataflow_set *set, variable_def **slot, variable var,
> variable new_var;
> int i;
>
> - new_var = (variable) pool_alloc (onepart_pool (var->onepart));
> + new_var = onepart_pool (var->onepart).allocate ();
> new_var->dv = var->dv;
> new_var->refcount = 1;
> var->refcount--;
> @@ -1771,7 +1833,7 @@ unshare_variable (dataflow_set *set, variable_def **slot, variable var,
> {
> location_chain new_lc;
>
> - new_lc = (location_chain) pool_alloc (loc_chain_pool);
> + new_lc = new location_chain_def;
> new_lc->next = NULL;
> if (node->init > initialized)
> new_lc->init = node->init;
> @@ -1936,7 +1998,7 @@ var_reg_delete_and_set (dataflow_set *set, rtx loc, bool modify,
> if (dv_as_opaque (node->dv) != decl || node->offset != offset)
> {
> delete_variable_part (set, node->loc, node->dv, node->offset);
> - pool_free (attrs_pool, node);
> + delete node;
> *nextp = next;
> }
> else
> @@ -1977,7 +2039,7 @@ var_reg_delete (dataflow_set *set, rtx loc, bool clobber)
> if (clobber || !dv_onepart_p (node->dv))
> {
> delete_variable_part (set, node->loc, node->dv, node->offset);
> - pool_free (attrs_pool, node);
> + delete node;
> *nextp = next;
> }
> else
> @@ -1997,7 +2059,7 @@ var_regno_delete (dataflow_set *set, int regno)
> {
> next = node->next;
> delete_variable_part (set, node->loc, node->dv, node->offset);
> - pool_free (attrs_pool, node);
> + delete node;
> }
> *reg = NULL;
> }
> @@ -2047,7 +2109,7 @@ get_addr_from_global_cache (rtx const loc)
> rtx x;
>
> gcc_checking_assert (GET_CODE (loc) == VALUE);
> -
> +
> bool existed;
> rtx *slot = &global_get_addr_cache->get_or_insert (loc, &existed);
> if (existed)
> @@ -2085,14 +2147,14 @@ get_addr_from_local_cache (dataflow_set *set, rtx const loc)
> location_chain l;
>
> gcc_checking_assert (GET_CODE (loc) == VALUE);
> -
> +
> bool existed;
> rtx *slot = &local_get_addr_cache->get_or_insert (loc, &existed);
> if (existed)
> return *slot;
>
> x = get_addr_from_global_cache (loc);
> -
> +
> /* Tentative, avoiding infinite recursion. */
> *slot = x;
>
> @@ -2304,7 +2366,7 @@ drop_overlapping_mem_locs (variable_def **slot, overlapping_mems *coms)
> if (VAR_LOC_1PAUX (var))
> VAR_LOC_FROM (var) = NULL;
> }
> - pool_free (loc_chain_pool, loc);
> + delete loc;
> }
>
> if (!var->var_part[0].loc_chain)
> @@ -2538,7 +2600,7 @@ val_reset (dataflow_set *set, decl_or_value dv)
> if (var->onepart == ONEPART_VALUE)
> {
> rtx x = dv_as_value (dv);
> -
> +
> /* Relationships in the global cache don't change, so reset the
> local cache entry only. */
> rtx *slot = local_get_addr_cache->get (x);
> @@ -2807,7 +2869,7 @@ variable_union (variable src, dataflow_set *set)
> goto restart_onepart_unshared;
> }
>
> - *nodep = nnode = (location_chain) pool_alloc (loc_chain_pool);
> + *nodep = nnode = new location_chain_def;
> nnode->loc = snode->loc;
> nnode->init = snode->init;
> if (!snode->set_src || MEM_P (snode->set_src))
> @@ -2927,7 +2989,7 @@ variable_union (variable src, dataflow_set *set)
> location_chain new_node;
>
> /* Copy the location from SRC. */
> - new_node = (location_chain) pool_alloc (loc_chain_pool);
> + new_node = new location_chain_def;
> new_node->loc = node->loc;
> new_node->init = node->init;
> if (!node->set_src || MEM_P (node->set_src))
> @@ -2982,7 +3044,7 @@ variable_union (variable src, dataflow_set *set)
> location_chain new_node;
>
> /* Copy the location from SRC. */
> - new_node = (location_chain) pool_alloc (loc_chain_pool);
> + new_node = new location_chain_def;
> new_node->loc = node->loc;
> new_node->init = node->init;
> if (!node->set_src || MEM_P (node->set_src))
> @@ -3078,7 +3140,7 @@ variable_union (variable src, dataflow_set *set)
> {
> location_chain new_lc;
>
> - new_lc = (location_chain) pool_alloc (loc_chain_pool);
> + new_lc = new location_chain_def;
> new_lc->next = NULL;
> new_lc->init = node->init;
> if (!node->set_src || MEM_P (node->set_src))
> @@ -3296,7 +3358,7 @@ insert_into_intersection (location_chain *nodep, rtx loc,
> else if (r > 0)
> break;
>
> - node = (location_chain) pool_alloc (loc_chain_pool);
> + node = new location_chain_def;
>
> node->loc = loc;
> node->set_src = NULL;
> @@ -3817,7 +3879,7 @@ canonicalize_values_star (variable_def **slot, dataflow_set *set)
> if (dv_as_opaque (list->dv) == dv_as_opaque (cdv))
> {
> *listp = list->next;
> - pool_free (attrs_pool, list);
> + delete list;
> list = *listp;
> break;
> }
> @@ -3835,7 +3897,7 @@ canonicalize_values_star (variable_def **slot, dataflow_set *set)
> if (dv_as_opaque (list->dv) == dv_as_opaque (dv))
> {
> *listp = list->next;
> - pool_free (attrs_pool, list);
> + delete list;
> list = *listp;
> break;
> }
> @@ -4016,7 +4078,7 @@ variable_merge_over_cur (variable s1var, struct dfset_merge *dsm)
> {
> if (node)
> {
> - dvar = (variable) pool_alloc (onepart_pool (onepart));
> + dvar = onepart_pool (onepart).allocate ();
> dvar->dv = dv;
> dvar->refcount = 1;
> dvar->n_var_parts = 1;
> @@ -4152,8 +4214,7 @@ variable_merge_over_cur (variable s1var, struct dfset_merge *dsm)
> INSERT);
> if (!*slot)
> {
> - variable var = (variable) pool_alloc (onepart_pool
> - (ONEPART_VALUE));
> + variable var = onepart_pool (ONEPART_VALUE).allocate ();
> var->dv = dv;
> var->refcount = 1;
> var->n_var_parts = 1;
> @@ -4240,7 +4301,7 @@ dataflow_set_merge (dataflow_set *dst, dataflow_set *src2)
> dataflow_set_init (dst);
> dst->stack_adjust = cur.stack_adjust;
> shared_hash_destroy (dst->vars);
> - dst->vars = (shared_hash) pool_alloc (shared_hash_pool);
> + dst->vars = new shared_hash_def;
> dst->vars->refcount = 1;
> dst->vars->htab = new variable_table_type (MAX (src1_elems, src2_elems));
>
> @@ -4366,7 +4427,7 @@ remove_duplicate_values (variable var)
> {
> /* Remove duplicate value node. */
> *nodep = node->next;
> - pool_free (loc_chain_pool, node);
> + delete node;
> continue;
> }
> else
> @@ -4519,7 +4580,7 @@ variable_post_merge_new_vals (variable_def **slot, dfset_post_merge *dfpm)
> to be added when we bring perm in. */
> att = *curp;
> *curp = att->next;
> - pool_free (attrs_pool, att);
> + delete att;
> }
> }
>
> @@ -4779,7 +4840,7 @@ dataflow_set_preserve_mem_locs (variable_def **slot, dataflow_set *set)
> }
> }
> *locp = loc->next;
> - pool_free (loc_chain_pool, loc);
> + delete loc;
> }
>
> if (!var->var_part[0].loc_chain)
> @@ -4851,7 +4912,7 @@ dataflow_set_remove_mem_locs (variable_def **slot, dataflow_set *set)
> if (VAR_LOC_1PAUX (var))
> VAR_LOC_FROM (var) = NULL;
> }
> - pool_free (loc_chain_pool, loc);
> + delete loc;
> }
>
> if (!var->var_part[0].loc_chain)
> @@ -7302,7 +7363,7 @@ variable_from_dropped (decl_or_value dv, enum insert_option insert)
>
> gcc_checking_assert (onepart == ONEPART_VALUE || onepart == ONEPART_DEXPR);
>
> - empty_var = (variable) pool_alloc (onepart_pool (onepart));
> + empty_var = onepart_pool (onepart).allocate ();
> empty_var->dv = dv;
> empty_var->refcount = 1;
> empty_var->n_var_parts = 0;
> @@ -7406,7 +7467,7 @@ variable_was_changed (variable var, dataflow_set *set)
>
> if (!empty_var)
> {
> - empty_var = (variable) pool_alloc (onepart_pool (onepart));
> + empty_var = onepart_pool (onepart).allocate ();
> empty_var->dv = var->dv;
> empty_var->refcount = 1;
> empty_var->n_var_parts = 0;
> @@ -7530,7 +7591,7 @@ set_slot_part (dataflow_set *set, rtx loc, variable_def **slot,
> if (!var)
> {
> /* Create new variable information. */
> - var = (variable) pool_alloc (onepart_pool (onepart));
> + var = onepart_pool (onepart).allocate ();
> var->dv = dv;
> var->refcount = 1;
> var->n_var_parts = 1;
> @@ -7725,7 +7786,7 @@ set_slot_part (dataflow_set *set, rtx loc, variable_def **slot,
> set_src = node->set_src;
> if (var->var_part[pos].cur_loc == node->loc)
> var->var_part[pos].cur_loc = NULL;
> - pool_free (loc_chain_pool, node);
> + delete node;
> *nextp = next;
> break;
> }
> @@ -7737,7 +7798,7 @@ set_slot_part (dataflow_set *set, rtx loc, variable_def **slot,
> }
>
> /* Add the location to the beginning. */
> - node = (location_chain) pool_alloc (loc_chain_pool);
> + node = new location_chain_def;
> node->loc = loc;
> node->init = initialized;
> node->set_src = set_src;
> @@ -7819,7 +7880,7 @@ clobber_slot_part (dataflow_set *set, rtx loc, variable_def **slot,
> if (dv_as_opaque (anode->dv) == dv_as_opaque (var->dv)
> && anode->offset == offset)
> {
> - pool_free (attrs_pool, anode);
> + delete anode;
> *anextp = anext;
> }
> else
> @@ -7919,7 +7980,7 @@ delete_slot_part (dataflow_set *set, rtx loc, variable_def **slot,
> if (pos == 0 && var->onepart && VAR_LOC_1PAUX (var))
> VAR_LOC_FROM (var) = NULL;
> }
> - pool_free (loc_chain_pool, node);
> + delete node;
> *nextp = next;
> break;
> }
> @@ -8080,7 +8141,7 @@ loc_exp_insert_dep (variable var, rtx x, variable_table_type *vars)
> return;
>
> if (var->onepart == NOT_ONEPART)
> - led = (loc_exp_dep *) pool_alloc (loc_exp_dep_pool);
> + led = new loc_exp_dep;
> else
> {
> loc_exp_dep empty;
> @@ -8888,7 +8949,7 @@ notify_dependents_of_changed_value (rtx val, variable_table_type *htab,
> break;
>
> case NOT_ONEPART:
> - pool_free (loc_exp_dep_pool, led);
> + delete led;
> ivar = htab->find_with_hash (ldv, dv_htab_hash (ldv));
> if (ivar)
> {
> @@ -9010,7 +9071,7 @@ emit_notes_for_differences_1 (variable_def **slot, variable_table_type *new_vars
>
> if (!empty_var)
> {
> - empty_var = (variable) pool_alloc (onepart_pool (old_var->onepart));
> + empty_var = onepart_pool (old_var->onepart).allocate ();
> empty_var->dv = old_var->dv;
> empty_var->refcount = 0;
> empty_var->n_var_parts = 0;
> @@ -9451,8 +9512,6 @@ vt_emit_notes (void)
> if (MAY_HAVE_DEBUG_INSNS)
> {
> dropped_values = new variable_table_type (cselib_get_next_uid () * 2);
> - loc_exp_dep_pool = create_alloc_pool ("loc_exp_dep pool",
> - sizeof (loc_exp_dep), 64);
> }
>
> dataflow_set_init (&cur);
> @@ -9871,18 +9930,7 @@ vt_initialize (void)
>
> alloc_aux_for_blocks (sizeof (struct variable_tracking_info_def));
>
> - attrs_pool = create_alloc_pool ("attrs_def pool",
> - sizeof (struct attrs_def), 1024);
> - var_pool = create_alloc_pool ("variable_def pool",
> - sizeof (struct variable_def)
> - + (MAX_VAR_PARTS - 1)
> - * sizeof (((variable)NULL)->var_part[0]), 64);
> - loc_chain_pool = create_alloc_pool ("location_chain_def pool",
> - sizeof (struct location_chain_def),
> - 1024);
> - shared_hash_pool = create_alloc_pool ("shared_hash_def pool",
> - sizeof (struct shared_hash_def), 256);
> - empty_shared_hash = (shared_hash) pool_alloc (shared_hash_pool);
> + empty_shared_hash = new shared_hash_def;
> empty_shared_hash->refcount = 1;
> empty_shared_hash->htab = new variable_table_type (1);
> changed_variables = new variable_table_type (10);
> @@ -9901,15 +9949,12 @@ vt_initialize (void)
> {
> cselib_init (CSELIB_RECORD_MEMORY | CSELIB_PRESERVE_CONSTANTS);
> scratch_regs = BITMAP_ALLOC (NULL);
> - valvar_pool = create_alloc_pool ("small variable_def pool",
> - sizeof (struct variable_def), 256);
> preserved_values.create (256);
> global_get_addr_cache = new hash_map<rtx, rtx>;
> }
> else
> {
> scratch_regs = NULL;
> - valvar_pool = NULL;
> global_get_addr_cache = NULL;
> }
>
> @@ -10243,20 +10288,18 @@ vt_finalize (void)
> empty_shared_hash->htab = NULL;
> delete changed_variables;
> changed_variables = NULL;
> - free_alloc_pool (attrs_pool);
> - free_alloc_pool (var_pool);
> - free_alloc_pool (loc_chain_pool);
> - free_alloc_pool (shared_hash_pool);
> + attrs_def::pool.release ();
> + var_pool.release ();
> + location_chain_def::pool.release ();
> + shared_hash_def::pool.release ();
>
> if (MAY_HAVE_DEBUG_INSNS)
> {
> if (global_get_addr_cache)
> delete global_get_addr_cache;
> global_get_addr_cache = NULL;
> - if (loc_exp_dep_pool)
> - free_alloc_pool (loc_exp_dep_pool);
> - loc_exp_dep_pool = NULL;
> - free_alloc_pool (valvar_pool);
> + loc_exp_dep::pool.release ();
> + valvar_pool.release ();
> preserved_values.release ();
> cselib_finish ();
> BITMAP_FREE (scratch_regs);
>
v2
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0006-Change-use-to-type-based-pool-allocator-in-var-track.patch
Type: text/x-patch
Size: 20454 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150529/207a0b02/attachment.bin>
More information about the Gcc-patches
mailing list