This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
[tree-ssa][ GC, Virtual operands, and GCing between passes
- From: Andrew MacLeod <amacleod at redhat dot com>
- To: gcc mailing list <gcc at gcc dot gnu dot org>
- Date: 09 Dec 2003 14:35:22 -0500
- Subject: [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