Can we replace uses of vec<TYPE, va_gc> with vec<TYPE> in the backwards threader?

Aldy Hernandez aldyh@redhat.com
Wed Aug 30 12:31:00 GMT 2017


Hi!

I'm looking at tree-ssa-threadbackward.c, where we pass around a lot
of "vec<basic_block, va_gc>" pointers representing a path through a
flow graph.

I'm wondering why we use va_gc, when AFAICT, the paths are local to
the pass, and we can easily free them with path.release() at the end
of the pass.  For that matter, it seems like we're already going
through the trouble of freeing them manually:

  vec<basic_block, va_gc> *bb_path;
  vec_alloc (bb_path, 10);
...
  vec_free (bb_path);

Am I missing something wrt vl_embed and vl_ptr magic, or would it be
acceptable to replace all these vec<basic_block, va_gc> with
vec<basic_block> and use the stack?  First because the GC has
additional overhead, and second because vec<TYPE, va_gc> is fugly.

If so, I'm assuming that similar things can be done throughout the
compiler.  Why use GC, when a vector is local to a pass?

Thanks.
Aldy



More information about the Gcc mailing list