RFR: 8292301: [REDO v2] C2 crash when allocating array of size too large
Roland Westrelin
roland at openjdk.org
Fri Aug 26 09:05:48 UTC 2022
On top of the redo, this fixed 2 bugs:
8288184: the problem here is that the ValidLengthTest input of an
AllocateArrayNode becomes a constant. The CatchNode would then change
types if it was reprocessed but it's not. Custom logic is needed to
enqueue the CatchNode when the ValidLengthTest input of an
AllocateArrayNode changes. The CastII out of the AllocateArrayNode
becomes top but the fallthrough path doesn't die. This happens with
igvn in the case of the bug but could also happen with ccp. I fixed
both in this patch.
8291665: the code pattern for this is 2 AllocateArrayNodes out of loop
with a shared ValidLengthTest input in a loop. When the loop is cloned
that causes Phis to be added between the AllocateArrayNodes and the
BoolNode of the ValidLengthTest inputs. Split if runs next and it
doesn't expect the Phi at the ValidLengthTest inputs. The fix here is
to clone the Bool/Cmp subgraph down on loop cloning. There's logic for
that when the use of the bool is an If for instance so I simply added
a special case to run that logic for an AllocateArrayNode use as
well. Note that the test case I added fails reliably on 11 but not
with the current jdk developement branch. AFAICT, the bug is there but
something unrelated changed and a slightly different graph is built
for the test case that prevents split if.
-------------
Commit messages:
- dos->unix test file
- move tests
- test fix
- fix
- test
- test for 8288184
- fix & test for 8291665
- Revert "8292260: [BACKOUT] JDK-8279219: [REDO] C2 crash when allocating array of size too large"
Changes: https://git.openjdk.org/jdk/pull/10038/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10038&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8292301
Stats: 449 lines in 15 files changed: 368 ins; 53 del; 28 mod
Patch: https://git.openjdk.org/jdk/pull/10038.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/10038/head:pull/10038
PR: https://git.openjdk.org/jdk/pull/10038
More information about the hotspot-compiler-dev
mailing list