RFR: 8291599: Assertion in PhaseIdealLoop::skeleton_predicate_has_opaque after JDK-8289127 [v3]

Christian Hagedorn chagedorn at openjdk.org
Mon Sep 12 06:54:45 UTC 2022


On Fri, 9 Sep 2022 12:05:03 GMT, Roland Westrelin <roland at openjdk.org> wrote:

>> In TestPhiInSkeletonPredicateExpression.test1():
>> 
>> - Loop predication adds predicates for the null check of array and the
>>   array range check. It also adds skeleton predicates in case of
>>   subsequent unrolling.
>> 
>> - One of the skeleton predicate has the following shape:
>> 
>> (Opaque4 (Bool (CmpUL (AddL (AddL (ConvI2L (LoadI (Phi ...))) (ConvI2L (CastII (AddI (OpaqueLoopInit OpaqueLoopStride))))) -1) ...)))
>> 
>> - Split thru phi pushes the null check through the dominating
>>   region. The skeleton predicate subgraph is transformed to:
>> 
>> (Opaque4 (Bool (CmpUL (Phi ...) ...)))
>> 
>> - Logic that processes skeleton predicate can no longer find the
>>   OpaqueLoopInit and OpaqueLoopStride nodes because they are now
>>   behind a phi. That causes the assert to fire.
>> 
>> The fix I propose is to catch cases where part of a skeleton predicate
>> expression (a subgraph with a OpaqueLoopInit or OpaqueLoopStride node)
>> is being split during split if and to clone the entire skeleton
>> predicate subgraph then.
>> 
>> There's a already logic for that currently but it only triggers if
>> PhaseIdealLoop::split_up() tries to split an OpaqueLoopInit or
>> OpaqueLoopStride. In the case here, the OpaqueLoopInit and
>> OpaqueLoopStride nodes have control above the region at which split if
>> occurs. So they are never split by PhaseIdealLoop::split_up(). The
>> AddL nodes in subgraph are.
>
> Roland Westrelin has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision:
> 
>  - Christian's review
>  - Merge branch 'master' into JDK-8291599
>  - Update test/hotspot/jtreg/compiler/loopopts/TestPhiInSkeletonPredicateExpression.java
>    
>    Co-authored-by: Christian Hagedorn <christian.hagedorn at oracle.com>
>  - Update src/hotspot/share/opto/loopTransform.cpp
>    
>    Co-authored-by: Christian Hagedorn <christian.hagedorn at oracle.com>
>  - fix
>  - test

That looks good to me, thanks for doing the changes!

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

Marked as reviewed by chagedorn (Reviewer).

PR: https://git.openjdk.org/jdk/pull/10022


More information about the hotspot-compiler-dev mailing list