RFR: enqueue barrier + some other things
Roland Westrelin
rwestrel at redhat.com
Wed Jun 20 09:09:41 UTC 2018
http://cr.openjdk.java.net/~roland/shenandoah/enqueue-barrier/webrev.00/
This implements the traversal's enqueue barrier as a standalone node
that's expanded at the the same time the write barriers are expanded.
Also:
We used to guard a write barrier with a null check at parse time:
if (val != null) {
val' = wb(val);
}
I removed the null check from parse time and it is now added at
expansion time so the write barrier can float around during
optimizations. I also swapped the heap stable test and the null check
because I suppose val is often non null:
if (!heap stable) {
if (val != null) {
// rest of write barrier code
}
}
I found a bug that could cause write barriers to be moved to a more
frequent path. That's fixed.
To move write barriers around and to expand write barriers, I need to
hack the memory graph. I had 2 ways to do that (a "simple" one for write
barrier optimizations, an "extensive" one for write barrier
expansion). I found that in some corner case the simple one fails so now
I switched to only using the extensive one which caused some massive
code refactoring. Because of that change I also had to move write
barrier optimizations to their own pass.
Performance on the usual benchmarks is unaffected by all of this.
Roland.
More information about the shenandoah-dev
mailing list