On Sat, Dec 17, 2016 at 01:19:41AM -0700, Jeff Law wrote:
> On 12/16/2016 12:29 AM, Trevor Saunders wrote:
> > On Thu, Dec 15, 2016 at 06:54:43PM -0700, Jeff Law wrote:
> > > unsigned cnt = 0;
> > > + bitmap live_bytes = NULL;
> > > + bitmap orig_live_bytes = NULL;
> > >
> > > *use_stmt = NULL;
> > >
> > > + /* REF is a memory write. Go ahead and get its base, size, extent
> > > + information and encode the bytes written into LIVE_BYTES. We can
> > > + handle any case where we have a known base and maximum size.
> > > +
> > > + However, experimentation has shown that bit level tracking is not
> > > + useful in practice, so we only track at the byte level.
> > > +
> > > + Furthermore, experimentation has shown that 99% of the cases
> > > + that require byte tracking are 64 bytes or less. */
> > > + if (valid_ao_ref_for_dse (ref)
> > > + && (ref->max_size / BITS_PER_UNIT
> > > + <= PARAM_VALUE (PARAM_DSE_MAX_OBJECT_SIZE)))
> > > + {
> > > + live_bytes = BITMAP_ALLOC (NULL);
> > > + orig_live_bytes = BITMAP_ALLOC (NULL);
> > > + bitmap_set_range (live_bytes,
> > > + ref->offset / BITS_PER_UNIT,
> > > + ref->max_size / BITS_PER_UNIT);
> > > + bitmap_copy (orig_live_bytes, live_bytes);
> >
> > would it maybe make sense to use sbitmaps since the length is known to
> > be short, and doesn't change after allocation?
> So a few interesting things have to be dealt if we want to make this change.
> I already mentioned the need to bias based on ref->offset so that the range
> of bytes we're tracking is represented 0..size.
>
> While we know the length of the potential dead store we don't know the
> length of the subsequent stores that we're hoping make the original a dead
> store. Thus when we start clearing LIVE_BYTES based on those subsequent
> stores, we have to normalize those against the ref->offset of the original
> store.
>
> What's even more fun is sizing. Those subsequent stores may be considerably
> larger. Which means that a bitmap_clear_range call has to be a hell of a
> lot more careful when working with sbitmaps (we just happily stop all over
> memory in that case) whereas a bitmap the right things will "just happen".
>
> On a positive size since we've normalized the potential dead store's byte
> range to 0..size, it means computing trims is easier because we inherently
> know how many bits were originally set. So compute_trims becomes trivial
> and we can simplify trim_complex_store a bit as well.
>
> And, of course, we don't have a bitmap_{clear,set}_range or a
> bitmap_count_bits implementation for sbitmaps.
>
>
> It's all a bit of "ugh", but should be manageable.
yeah, but that seems like enough work that you could reasonably stick
with bitmap instead.
Trev
p.s. sorry I've been falling behind lately.
>
> Jeff