RFR: 8336830: C2: assert(get_loop(lca)->_nest < n_loop->_nest || lca->in(0)->is_NeverBranch()) failed: must not be moved into inner loop
Roland Westrelin
roland at openjdk.org
Thu Jul 25 15:27:48 UTC 2024
A store is sunk from a counted loop into an enclosing infinite
loop. The assert fires because:
get_loop(lca)->_nest < n_loop->_nest
is false. That happens because the outer loop was found to be infinite
in the current loop opts pass. When that happens, it's not properly
attached to the loop tree. The second part of the assert was added to
cover a similar case:
lca->in(0)->is_NeverBranch()
but it doesn't work in this case bcause lca is not a projection of the
`NeverBranch`. It's the exit projection of the counted loop. The fix I
propose changes that part of the assert to test that lca is, indeed,
in an infinite loop in a way that's robust.
I also removed some code that I believe to be useless following
8335709.
-------------
Commit messages:
- fix & test
Changes: https://git.openjdk.org/jdk/pull/20334/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=20334&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8336830
Stats: 61 lines in 2 files changed: 57 ins; 2 del; 2 mod
Patch: https://git.openjdk.org/jdk/pull/20334.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/20334/head:pull/20334
PR: https://git.openjdk.org/jdk/pull/20334
More information about the hotspot-compiler-dev
mailing list