On Fri, 2013-08-30 at 10:09 +0200, Richard Biener wrote:
> On Thu, Aug 29, 2013 at 9:44 PM, Steven Bosscher <stevenb....@gmail.com> 
> wrote:
> > On Thu, Aug 29, 2013 at 6:20 PM, David Malcolm <dmalc...@redhat.com> wrote:
> >>         * gimple.c (gt_ggc_mx (gimple)): New, as required by GTY((user)).
> >>         (gt_pch_nx (gimple)): Likewise.
> >
> > GIMPLE isn't supposed to end up in a PCH. Can you please make this
> > function simply call gcc_unreachable()?
> >
> > FWIW 1: I really think all these hand-written markers aren't a good
> > idea, we should really figure out a way to have automatic marker
> > function generators, something less complex than gengtype, of course.
> > But to have all these calls to the type-mangled marker functions
> > (gt_pch_n_9tree_node, etc.) is going to be a problem in the long term.
> >
> > It seems to me that the first step in all these conversions to
> > hand-written markers should be to make gengtype spit out the marker
> > functions *without* the type name mangling, i.e. all marker functions
> > should just be gt_ggc_mx(type) / gt_pch_nx(type).
> 
> Yes, the original idea was that gengtype would do that.  For things we like
> to optimize the GTY((user)) thing would tell it that we do provide the 
> markers.
> Like when you want to look through a non-GCed intermediate object.  Or
> for things like GTY((chain)) stuff that doesn't really work if you have 
> multiple
> chains (without clever GTY((skip))s...).
> 
> The lack of the unmangled overloads is annoying :/  IIRC Diego halfway 
> completed
> the transition to unmangled overloads / specializations?

How would that work, and is that something that it would be productive
for me to work on?

Currently AIUI gtype-desc.h contains mangled macros and decls e.g.:
  extern void gt_ggc_mx_rtvec_def (void *);
  #define gt_ggc_m_9rtvec_def(X) do { \
    if (X != NULL) gt_ggc_mx_rtvec_def (X);\
    } while (0)

and the corresponding functions in gtype-desc.c contain:

void
gt_ggc_mx_rtvec_def (void *x_p)
{
  struct rtvec_def * const x = (struct rtvec_def *)x_p;
  if (ggc_test_and_set_mark (x))
    {
        /* visit fields of x, invoking the macros */
    }
}

Is the goal for the field-visiting code to all be able to simply do:
   gt_ggc_mx (field)
and have overloading resolve it all? (and handle e.g. chain_next etc
etc)

Presumably if this were implemented, then hand-written GTY functions
would be that much easier to maintain, and perhaps this gimple
conversion idea would be more acceptable?  (or, in other words, should I
work on this?)

Thanks
Dave

Reply via email to