On Tue, Dec 11, 2012 at 6:55 PM, Martin Jambor wrote:
> some IPA passes do have on-the side vectors with their information
> about each cgraph node or edge and those are independent GC roots.
> Not all, but many (e.g. inline_summary_vec or ipa_edge_args_vector) do
> have pointers to other GC data, usually trees, and thus are mananged
> by GC too.  Many of those trees (e.g. constants) might not be
> reachable at least in LTO WPA phase.  Sure enough, inventing something
> more clever for them might be a good idea.

I wasn't really thinking of 'tree' anyway; 'tree' is way too complex for this.

I'm more thinking of pointers from on-the-side data to cgraph
nodes/edges, and of pointers within the cgraph objects that are
"redundant" from a GC marking point of view. Those pointers should
only point to reachable cgraph nodes/edges, so it shouldn't be
necessary to mark them separately when walking the on-the-side data.

Take, for instance, "struct cgraph_edge" where all pointer fields are
reachable via other pointers already:

struct cgraph_edge {
...
  struct cgraph_node *caller; // reachable via symtab_nodes
  struct cgraph_node *callee; // reachable via symtab_nodes
  struct cgraph_edge *prev_caller; // reachable via symtab_nodes
  struct cgraph_edge *next_caller; // reachable via symtab_nodes
  struct cgraph_edge *prev_callee; // reachable via symtab_nodes
  struct cgraph_edge *next_callee; // reachable via symtab_nodes
  gimple call_stmt; // reachable via the CFG that contains the call
...
}

so, at least in theory, it shouldn't be necessary to do anything for a
cgraph_edge.
Unless I'm missing something...

Ciao!
Steven


PS: shouldn't "struct symtab_node" have GTY next/prev markers?

Reply via email to