[16] RFR(S): 8248226: TestCloneAccessStressGCM fails with -XX:-ReduceBulkZeroing
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Jul 7 00:23:34 UTC 2020
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