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

Igor Veresov igor.veresov at oracle.com
Mon Nov 4 18:18:36 PST 2013

Thanks for the review!
All fixed + I’ve removed the CProj->NeverBranchNode skip for the load in the verification routine. It shouldn’t be necessary. Reran CTW with G1.

Updated webrev: http://cr.openjdk.java.net/~iveresov/8017065/webrev.1/


On Nov 4, 2013, at 9:02 AM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:

> 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.
> Thanks,
> Vladimir
> 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