[16] RFR(S): 8248791: sun/util/resources/cldr/TimeZoneNamesTest.java fails with -XX:-ReduceInitialCardMarks -XX:-ReduceBulkZeroing

Christian Hagedorn christian.hagedorn at oracle.com
Wed Aug 12 13:34:26 UTC 2020


Hi

Please review the following patch:
https://bugs.openjdk.java.net/browse/JDK-8248791
http://cr.openjdk.java.net/~chagedorn/8248791/webrev.00/

The problem can be traced back to cloning an object and wrongly 
optimizing a field load from it to a constant zero. In 
LoadNode::Value(), we check if a load is performed on a 
freshly-allocated object. If that is the case we can replace the load by 
a constant zero. This is done by calling can_see_stored_value() at [1]. 
In this method, we first check if we can find a captured store with 
find_captured_store() [2].

When enabling ReduceBulkZeroing in the testcase, then this method 
returns NULL because captured_store_insertion_point() bails out at [3] 
for completed InitializationNodes (is set to complete at [4] since 
ReduceBulkZeroing is enabled and the allocation belongs to a clone).

When disabling ReduceBulkZeroing in the testcase, find_caputured_store() 
returns a non-NULL ProjNode because the InitializationNode of the 
allocation is not marked completed. We loop one more time and then 
return a constant zero at [5] because there is no store for the 
allocation (the ArrayCopyNode is responsible for the initialization of 
the cloned object).

The fix now only returns a constant zero if ReduceBulkZeroing is enabled 
or when the allocation does not belong to an ArrayCopyNode clone (if 
ReduceBulkZeroing is disabled).

Thank you!

Best regards,
Christian


[1] 
http://hg.openjdk.java.net/jdk/jdk/file/e7109ed4bbb0/src/hotspot/share/opto/memnode.cpp#l1968
[2] 
http://hg.openjdk.java.net/jdk/jdk/file/e7109ed4bbb0/src/hotspot/share/opto/memnode.cpp#l1115
[3] 
http://hg.openjdk.java.net/jdk/jdk/file/e7109ed4bbb0/src/hotspot/share/opto/memnode.cpp#l3737
[4] 
http://hg.openjdk.java.net/jdk/jdk/file/e7109ed4bbb0/src/hotspot/share/opto/library_call.cpp#l4236
[5] 
http://hg.openjdk.java.net/jdk/jdk/file/e7109ed4bbb0/src/hotspot/share/opto/memnode.cpp#l1106


More information about the hotspot-compiler-dev mailing list