RFR: 8271340: Crash PhaseIdealLoop::clone_outer_loop
Roland Westrelin
roland at openjdk.java.net
Mon Aug 23 15:07:42 UTC 2021
The test has a counted loop and an infinite loop. The infinite loop is
reachable from multiple paths and its loop head is a Region with more
than 3 inputs. One of these paths is from the counted loop. When loop
opts run, a NeverBranch is added to the infinite loop that's removed
by NeverBranchNode::Ideal() next because in(0) of the NeverBranch is a
Region and not a Loop.
When CCP runs, it finds the counted loop exit is never reached because
a test in the loop body that depends on a loop phi is never taken. As
a consequence nodes along the path from the counted loop end to the
infinite loop Region have type top. One of these nodes is a Call
node. PhaseCCP::do_transform() should then cause the path between the
counted loop and the infinite loop to optimize out but that doesn't
happen because do_transform() starts from Root by following inputs.
The dead path is only reachable from the infinite loop but the there's
no edge between Root and the infinite loop.
IGVN next runs, processes the Call Node, finds it's dead, kills
everything around it which causes the OuterStripMinedLoopEnd to loose
a projection. That later triggers the crash.
The fix I propose is to be more conservative in
NeverBranchNode::Ideal() and to check for a in(0) that's a Region. As
a consequence, at CCP time, the infinite loop is reachable from Root.
This change also requires some adjustments to Shenandoah specific code
that makes assumptions about the shape of infinite loops.
-------------
Commit messages:
- fix & test
Changes: https://git.openjdk.java.net/jdk/pull/5220/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5220&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8271340
Stats: 180 lines in 4 files changed: 137 ins; 41 del; 2 mod
Patch: https://git.openjdk.java.net/jdk/pull/5220.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/5220/head:pull/5220
PR: https://git.openjdk.java.net/jdk/pull/5220
More information about the hotspot-compiler-dev
mailing list