RFR: 8271341: Opcode() != Op_If && Opcode() != Op_RangeCheck) || outcnt() == 2 assert failure with Test7179138_1.java [v2]
Vladimir Kozlov
kvn at openjdk.java.net
Fri Sep 3 15:41:28 UTC 2021
On Fri, 3 Sep 2021 07:46:07 GMT, Roland Westrelin <roland at openjdk.org> wrote:
>> The root cause of this bug is in PhaseStringOpts. In the middle of the
>> chain of calls that are optimized out, there's a diamond Region/If. On
>> most executions this diamond is optimized out by IGVN because once
>> PhaseStringOpts is over, all the Region's Phis are removed. But
>> because one input of the If/Bool/Cmp is set to top by PhaseStringOpts
>> when calls are removed, it sometimes happen that top propagates to the
>> If before the Region is optimized out. That causes control flow below
>> the If to become dead while it should still be reachable.
>>
>> The fix I propose is to have PhaseStringOpts removed the Region/If in
>> that case.
>
> 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 three additional commits since the last revision:
>
> - Merge with master
> - review
> - fix
Good.
-------------
Marked as reviewed by kvn (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/4944
More information about the hotspot-compiler-dev
mailing list