PING. An this time with an actual patch ;-). Aldy
On Sat, Sep 2, 2017 at 1:43 PM, Aldy Hernandez <al...@redhat.com> wrote: > On Fri, Sep 1, 2017 at 6:11 PM, Jeff Law <l...@redhat.com> wrote: >> On 09/01/2017 02:18 PM, Aldy Hernandez wrote: >>> Hi. >>> >>> Attached are misc cleanups to tree-ssa-threadbackwards.c and friends. >>> The main gist of the patch is making the path vectors live in the >>> heap, not GC. But I also cleaned up some comments to reflect reality, >>> and renamed VAR_BB which could use a more meaningful name. Finally, I >>> abstracted some common code to >>> register_jump_thread_path_if_profitable() in preparation for some >>> upcoming work by me :). >>> >>> Tested on x86-64 Linux. >> It looks like you dropped a level of indirection for path in >> profitable_jump_thread_path and perhaps others that push blocks onto the >> path? Does your change from having the vectors in the GC space to the >> heap also change them from embeddable vectors to a space efficient >> vector? It has to for this change to be safe. > > Part of my initial motivation was eliminating the double indirection > as well as removing the out-of-line calls to vec_alloc() and > vec_whatever_push(). > > And yes, the default plain vector<> uses the heap: > > template<typename T, > typename A = va_heap, > typename L = typename A::default_layout> > struct GTY((user)) vec > { > }; > > ...and va_heap defaults to the space efficient vector: > > struct va_heap > { > typedef vl_ptr default_layout; > ... > } > >> >> See the discussion in vec.h >> >> I don't recall any inherent reason we use the embedded vector layout. >> It's the default which is probably why it's used here more than anything. > > Just a wild guess, but this may be why: > > FIXME - Ideally, they would all be vl_ptr to encourage using regular > instances for vectors, but the existing GTY machinery is limited > in that it can only deal with GC objects that are pointers > themselves. > > and: > > /* Use vl_embed as the default layout for GC vectors. Due to GTY > limitations, GC vectors must always be pointers, so it is more > efficient to use a pointer to the vl_embed layout, rather than > using a pointer to a pointer as would be the case with vl_ptr. */ > >> >> Otherwise the change looks good. I think you just to make sure you're >> not using the embedded layout. Which I think is just a different type >> when you declare the vec. > > I have made the vectors auto_vec as Trevor suggested. As auto_vec is > just an inherited plain vec<> with some magic allocation sauce, they > can be passed around interchangeably. > > I also changed the hash sets so they live on the stack as opposed to > allocating memory dynamically, at Trevor's request as well. > > Bootstraps. OK pending another round of tests? > > Aldy
curr
Description: Binary data