[16] RFR(S): 8248226: TestCloneAccessStressGCM fails with -XX:-ReduceBulkZeroing

Christian Hagedorn christian.hagedorn at oracle.com
Tue Jul 7 07:19:25 UTC 2020


Thank you Vladimir for your review!

Best regards,
Christian

On 07.07.20 02:23, Vladimir Kozlov wrote:
> Looks good.
> 
> Thanks,
> Vladimir
> 
> On 7/3/20 4:42 AM, Christian Hagedorn wrote:
>> Hi
>>
>> Please review the following patch:
>> https://bugs.openjdk.java.net/browse/JDK-8248226
>> http://cr.openjdk.java.net/~chagedorn/8248226/webrev.00/
>>
>> C2 erroneously folds the addition in the return statement in the 
>> method TestCloneAccessStressGCM::test() to 0 when 
>> ReduceInitialCardMarks and ReduceBulkZeroing are disabled.
>>
>> The problem in the testcase can be traced back to 
>> LoadNode::find_previous_arraycopy() called from LoadNode::Ideal() for 
>> the loads dest.i1, dest.i2 etc. where we do not take GC barriers into 
>> account (disabled ReduceInitialCardMarks) when trying to find an 
>> ArrayCopyNode which belongs to a clone.
>>
>> As a result, we conclude that there is no ArrayCopyNode and bailout of 
>> the ideal transformation. Afterwards, we call LoadNode::Value() and 
>> look for a stored value for the allocation belonging to the clone() 
>> call. Since we cannot find one (because the ArrayCopyNode is 
>> initializing the allocation) we conclude that the field is 0 and 
>> replace the LoadNode by a constant 0. This happens for all the 
>> LoadNodes in the addition in the return statement which is then folded 
>> to 0 and returned.
>>
>> This could have been prevented if ReduceBulkZeroing was enabled. 
>> Because in that case, the InitializationNode would have been marked as 
>> completed at [1] and the InitializationNode::find_captured_store() 
>> method returned NULL at [2] and eventually the entire 
>> LoadNode::Value() method returned _type (int) instead of the constant 
>> 0 because of the bailout at [3] for completed InitializationNodes.
>>
>> Thank you!
>>
>> Best regards,
>> Christian
>>
>>
>> [1] 
>> http://hg.openjdk.java.net/jdk/jdk/file/a7c030723240/src/hotspot/share/opto/library_call.cpp#l4234 
>>
>> [2] 
>> http://hg.openjdk.java.net/jdk/jdk/file/a7c030723240/src/hotspot/share/opto/memnode.cpp#l3775 
>>
>> [3] 
>> http://hg.openjdk.java.net/jdk/jdk/file/a7c030723240/src/hotspot/share/opto/memnode.cpp#l3722 
>>


More information about the hotspot-compiler-dev mailing list