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

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Nov 4 18:22:01 PST 2013


Good.

Thanks,
Vladimir

On 11/4/13 6:18 PM, Igor Veresov wrote:
> 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