This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[tree-ssa][ GC, Virtual operands, and GCing between passes



Are we sure we want to GC between passes? :-|

since VDEFs and VUSEs are tree nodes, I can't allocate the structure
which holds them anywhere except GC'd memory can I?

ie

a_3 = VDEF <a_2>

This requires points to 2 trees.

the GC system has to know not to collect the trees I am pointing to in
the 2 words of the vdef vector.

but I dont want to GC the vdef vector.
I have something like:

struct v_operands_d *vops;

struct v_operands_d {
  unsigned int num
  tree *vec;
}

so I dont want the memory associated with either  'vops' or 'vec'
garbage collected, but I do want to keep around anything that
vec[0]..vec[num-1] points to.

Thats not really going to work too well is it? At least I haven't been
able to do it.  So I'll have to keep ggcing the memory for the vops
structure?.



What I'm really trying to avoid is having the actual 'tree *vec' vector
ggc allocated. I want to mamage the vector allocation myself.

So I need to mark all the elemnts of vec, but I dont want to mark vec
itself.

is that possible?

right now I have:

    typedef struct vdef_optype_d GTY(())
    {
      unsigned num_vdefs;
      tree * GTY((length ("%h.num_vdefs"))) vdefs;
    } vdef_optype_t;
    
    typedef struct vuse_optype_d GTY(())
    {
      unsigned num_vuses;
      tree * GTY((length ("%h.num_vuses"))) vuses;
    } vuse_optype_t;
    
    
    struct voperands_d GTY (())
    {
      /* List of VDEF references in this statement.  */
      struct vdef_optype_d GTY (()) vdef_ops;
    
      /* List of VUSE references in this statement.  */
      struct vuse_optype_d GTY (()) vuse_ops;
    };
    
    <...>
      /* Virtual operands (VDEF and VUSE).  */
      struct voperands_d * GTY (()) vops;
    <...>


And all the arguments of my vector are being marked, but it is also
marking 'vuses' and 'vdefs', which I *dont* want to be GC'd.

Is it possible to do this in any way, shape, or form?





Andrew



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]