[14] RFR(S): 8229016: C2 scalarization crashes with assert(node->Opcode() == Op_CastP2X) failed: ConvP2XNode required

Tobias Hartmann tobias.hartmann at oracle.com
Mon Aug 5 13:48:46 UTC 2019


Hi,

please review the following patch:
https://bugs.openjdk.java.net/browse/JDK-8229016
http://cr.openjdk.java.net/~thartmann/8229016/webrev.00/

When processing safepoint uses of a non-escaping array allocation during scalar replacement, we try
to determine array element values from memory. In this case, a copy to the array is replaced by
individual loads from the source [1]. Because the array copy has src == dst, we end up adding new
loads from the to-be-eliminated array which confuses/crashes the following removal code.

We should detect this case and try to determine the value from memory instead of adding a new load.

Thanks,
Tobias

[1] see PhaseMacroExpand::scalar_replacement -> PhaseMacroExpand::value_from_mem ->
PhaseMacroExpand::make_arraycopy_load


More information about the hotspot-compiler-dev mailing list