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/
igor
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