RFR: 8279219: [REDO] C2 crash when allocating array of size too large
Roland Westrelin
roland at openjdk.java.net
Tue Jan 4 08:58:33 UTC 2022
The new fix is largely similar to the previous one. 3 bugs were filed
because of the previous change but there are only really 2 issues:
- attaching the valid length condition at expansion time to the new
array runtime call causes issues. With Shenandoah, passes of loop
opts are executed after macro expansion but precedence edges are
ignored when assigning controls to nodes which causes loop opts to
incorrectly attempt to eliminate the node pointed to by the
precedence edge. A similar issue occurs when the runtime call ends
up in a subgraph that dies after macro expansion because the
precedence edge is not cleared by dead code elimination which causes
the runtime call to still be reachable. In the new patch, this is
fixed by appending an extra input to the runtime call instead of
using a precedence edge.
- In the previous patch, a top valid length input is used when there's
no valid length input that needs to be recorded. That can cause an
assert failure during CCP. If valid length initially has type top,
the CatchNode out of the AllocateArray then have type (control,
control). If next, the valid length input becomes constant 0, the
CatchNode has type (top, control). An assert catches that the type
of the CatchNode doesn't widen. This fixed by using 1 by default as
valid length input and tweaking CatchNode::Value.
The new patch includes test cases for both issues.
-------------
Commit messages:
- tests & fix
- Revert "8279204: [BACKOUT] JDK-8278413: C2 crash when allocating array of size too large"
Changes: https://git.openjdk.java.net/jdk/pull/6952/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6952&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8279219
Stats: 304 lines in 11 files changed: 229 ins; 53 del; 22 mod
Patch: https://git.openjdk.java.net/jdk/pull/6952.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/6952/head:pull/6952
PR: https://git.openjdk.java.net/jdk/pull/6952
More information about the hotspot-compiler-dev
mailing list