RFR: 8282590: C2: assert(addp->is_AddP() && addp->outcnt() > 0) failed: Don't process dead nodes [v6]
Emanuel Peter
duke at openjdk.java.net
Thu Mar 17 10:08:14 UTC 2022
> Problem:
> Sometimes nodes are generated, and then not properly added to any other node, nor added to the worklist, so that it could be deleted. In some cases, a node can thus survive after IGVN and enter into `ConnectionGraph::compute_escape`, where no dead nodes are expected (except constants).
>
> In `ArrayCopyNode::prepare_array_copy`:
> In one, I now add the new ConvI2LNode to the worklist if we are aborting.
> In the other case, I could safely reorder the code, such new ConvI2LNode would only be generated once we know we are not going to abort.
>
> In `SubTypeCheckNode::Ideal`:
> Replaced `set_req` with `set_req_X`, such that the input-node that is replaced (which is now potentially a dead node) is put on the worklist.
>
> In `ArrayCopyNode::Ideal`:
> If we decide to `return NULL` we also need to add the potentially dead forward / backward memory nodes to the worklist, they may turn out to be dead.
>
> Added a regression test: the test + flag combination that first reproduced this issue.
>
> All Tests, including this new regression test are passing. Also passing with newest commit (response to review).
Emanuel Peter has updated the pull request incrementally with one additional commit since the last revision:
use can_reshape, is equivalent
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/7728/files
- new: https://git.openjdk.java.net/jdk/pull/7728/files/5f68319d..a5c95e7d
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=7728&range=05
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=7728&range=04-05
Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod
Patch: https://git.openjdk.java.net/jdk/pull/7728.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/7728/head:pull/7728
PR: https://git.openjdk.java.net/jdk/pull/7728
More information about the hotspot-compiler-dev
mailing list