[9] RFR(S): 8136818: Test compiler/arraycopy/TestEliminatedArrayCopyDeopt.java fails with "m1 failed"
Tobias Hartmann
tobias.hartmann at oracle.com
Wed Aug 3 13:32:33 UTC 2016
Hi,
please review the following patch:
https://bugs.openjdk.java.net/browse/JDK-8136818
http://cr.openjdk.java.net/~thartmann/8136818/webrev.00/
The test fails because a non-escaping allocation is removed but re-allocation after deoptimization does not initialize the object with the correct values. The problem is that with -XX:-ReduceInitialCardMarks and -XX:+UseParallelGC we emit a StoreB in the post barrier between the ArrayCopy and the MemBarStoreStore (see GraphKit::write_barrier_post() and graph [1]). PhaseMacroExpand::value_from_mem() -> scan_mem_chain() -> ArrayCopyNode::may_modify() only expects a StoreCM node and therefore does not recognize the initializing ArrayCopy. As a result, the Object is re-allocated with uninitialized values.
I fixed this by adding the Op_StoreB case and moving the checks into ArrayCopyNode::may_modify_helper() to also recognize the card mark stores behind a Phi.
Tested with failing test, JPRT and RBT (running).
Thanks,
Tobias
[1] https://bugs.openjdk.java.net/secure/attachment/61959/graph.png
More information about the hotspot-compiler-dev
mailing list