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