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

Roland Westrelin roland at openjdk.java.net
Mon Aug 23 09:07:37 UTC 2021


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.

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

Commit messages:
 - fix

Changes: https://git.openjdk.java.net/jdk/pull/4944/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4944&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8271341
  Stats: 18 lines in 2 files changed: 16 ins; 1 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4944.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4944/head:pull/4944

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


More information about the hotspot-compiler-dev mailing list