RFR: enqueue barrier + some other things
Roland Westrelin
rwestrel at redhat.com
Wed Jun 20 13:30:37 UTC 2018
> What I mean is this. I believe we currently do:
>
> if (load(gc_state) != 0) { // Heap-stable
> if (load(gc_state) & FLAGS != 0) // evac-in-progress
> wb(..)
> }
> }
It might be because something breaks when we coalesce back to back heap
stable test but I would need to take a closer look.
> Also, if we do that, we'd emit, for each store, something like this:
>
> if (heap_stable()) {
> p' = wb(p); // write_barrier on target object
> }
> if (heap_stable()) {
> v' = wb(v); // storeval_barrier on value
> }
> if (heap_stable()) {
> enqueue(v'); // EQ barrier on value
> }
> p'.field = v'
>
> We *are* grouping back-to-back heap-stable checks, do we?
Assuming there's nothing in between that blocks it, yes. It doesn't take
much to block it, a null check for instance. The coalescing patch would
optimize that for sure.
Roland.
More information about the shenandoah-dev
mailing list