[jdk17] Integrated: 8256934: C2: assert(C->live_nodes() <= C->max_node_limit()) failed: Live Node limit exceeded limit

Christian Hagedorn chagedorn at openjdk.java.net
Wed Jun 16 13:06:52 UTC 2021


On Tue, 15 Jun 2021 11:45:16 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:

> The algorithm in step 2 in partial peeling to move nodes from the peeled section down to the non-peeled section creates a huge number of clones in the testcase which results in a live node assertion failure. The problem can be traced back to an inefficiency in creating new clones in `PhaseIdealLoop::clone_for_use_outside_loop()` when the graph contains cycles/diamonds to be cloned (see [example](https://github.com/chhagedorn/jdk/blob/bb1757a31883d33594fd8b4bb375de5cfc6a32ed/src/hotspot/share/opto/loopopts.cpp#L3560-L3586) taken from an improved algorithm for JDK-8268744)
> 
> Where the current algorithm needs to create around 90000 clones for the failing testcase, an improved algorithm only needs around 140 clones. However, for JDK 17, I propose to go with a simple bailout fix to minimize the risk (given that this is an edge case) and then follow up with an improved algorithm in an RFE ([JDK-8268744](https://bugs.openjdk.java.net/browse/JDK-8268744?filter=39569)).
> 
> Thanks,
> Christian

This pull request has now been integrated.

Changeset: 9ad19f78
Author:    Christian Hagedorn <chagedorn at openjdk.org>
URL:       https://git.openjdk.java.net/jdk17/commit/9ad19f7838e6f6e128583c191c5507c1e2bd5083
Stats:     88 lines in 2 files changed: 85 ins; 0 del; 3 mod

8256934: C2: assert(C->live_nodes() <= C->max_node_limit()) failed: Live Node limit exceeded limit

Reviewed-by: roland, vlivanov

-------------

PR: https://git.openjdk.java.net/jdk17/pull/54


More information about the hotspot-compiler-dev mailing list