RFR(S): 8237837: Shenandoah: assert(mem == __null) failed: only one safepoint

Roland Westrelin rwestrel at redhat.com
Tue Jan 28 10:43:24 UTC 2020


http://cr.openjdk.java.net/~roland/8237837/webrev.00/

At barrier expansion, raw memory needs to be correctly wired around
expanded barriers. For that, the raw memory subgraph is walked starting
from the Root node. When there's an infinite loop, the loop is connected
to the Root node through a NeverBranch. So that logic looks for a
NeverBranch from the Root node and if it finds one, it needs to find the
memory state in the loop. The current logic looks for the SafePoint in
the infinite loop. That breaks when the infinite loop has a SATB barrier
because then the loop body has a runtime call for which is_SafePoint()
returns true (eventhough the call doesn't safepoint). I've reworked the
logic so it ignores non safepointing runtime call and is more robust for
infinite loops.

Roland.



More information about the hotspot-compiler-dev mailing list