RFR(M): 8017065 C2 allows safepoint checks to leak into G1 pre-barriers

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Nov 4 09:02:32 PST 2013

in verification code start with i = 1 since in(0) points to Region itself:

+       if (x->is_Region()) {
+         for (uint i = 0; i < x->req(); i++) {

Also look for and skip NULL and C->top() popping node: x = worklist.pop();

Otherwise seems fine.


On 11/4/13 1:55 AM, Igor Veresov wrote:
> As an unfortunate result of Safepoint not producing memory, raw loads must be treated specially. In particular the control edge of such a load bears not only the obvious control dependency information but a part of the memory state dependency as well. As a result of that we should be very conservative about changing control of such nodes.
> The following change, extends the existing special treatment of raw pointer loads to all raw loads (which we have a bunch of in G1 barriers) and restricts the movement of raw loads dependent on range check in RCE.  Also I’ve added a verification pass to check consistency of the G1 pre-barriers, which should make easier to catch such things in the future.
> Webrev: http://cr.openjdk.java.net/~iveresov/8017065/webrev.0
> Testing: eyeballing graphs, CTW, Weblogic+Medrec

More information about the hotspot-compiler-dev mailing list