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