[jdk17] RFR: 8268362: [REDO] C2 crash when compile negative Arrays.copyOf length after loop [v2]

Vladimir Kozlov kvn at openjdk.java.net
Thu Jun 17 16:17:33 UTC 2021


On Thu, 17 Jun 2021 11:53:46 GMT, Hui Shi <hshi at openjdk.org> wrote:

>> This redos PR https://github.com/openjdk/jdk/pull/4238
>> 
>> Some closed tests fail due to original PR, the main reasons are:
>> 
>> 8268325/8268345
>> CastIINode created in AllocateArrayNode::make_ideal_length apply on a negative array length. GVN transform converts these CastIINode to top. This breaks assumptions, eg., array index node type is TypeInt.
>> 8268345
>> Some CastIINode is created in LoadRange::Ideal, which doesn't apply GVN transform. CastIINode can not be found in GVN hashtable and cause assertion failure.
>> Based on previous PR #4238, this PR unifies CastIINode processing post AllocateArrayNode::make_ideal_length. Setup type and add into igvn worklist. Avoid apply GVN transform to break different assumptions in parser.
>> 
>> Based on closed test failrue message, two new tests are added
>> 
>> TestNegArrayLengthAsIndex1 : fail in debug build even without previous PR #4238, it loads a negative array length and apply GVN transform (In GraphKit::load_array_length) which covert length to top node. It also assert in Parse::array_addressing.
>> 
>> TestNegArrayLengthAsIndex2 : similar with failrue in https://bugs.openjdk.java.net/browse/JDK-8268301
>
> Hui Shi has updated the pull request incrementally with one additional commit since the last revision:
> 
>   move duplicate code into GraphKit::cast_replace_array_length_post_allocation & add more comments

I forgot to say that tests should be in compiler/arraycopy/ directory.

-------------

PR: https://git.openjdk.java.net/jdk17/pull/49


More information about the hotspot-compiler-dev mailing list