Integrated: 8271341: Opcode() != Op_If && Opcode() != Op_RangeCheck) || outcnt() == 2 assert failure with Test7179138_1.java

Roland Westrelin roland at openjdk.java.net
Tue Sep 7 15:16:43 UTC 2021


On Fri, 30 Jul 2021 08:27:47 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.

This pull request has now been integrated.

Changeset: 99fb12c7
Author:    Roland Westrelin <roland at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/99fb12c798ad24cc4a671a666930ba42c3cd10c9
Stats:     19 lines in 2 files changed: 17 ins; 1 del; 1 mod

8271341: Opcode() != Op_If && Opcode() != Op_RangeCheck) || outcnt() == 2 assert failure with Test7179138_1.java

Reviewed-by: kvn, thartmann

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

PR: https://git.openjdk.java.net/jdk/pull/4944


More information about the hotspot-compiler-dev mailing list