RFR: 8255670: Improve C2's detection of modified nodes

Emanuel Peter epeter at openjdk.org
Mon Sep 12 16:31:38 UTC 2022


Added `record_modified_node` to:

Node::clone
Node::add_req
Node::add_req_batch
Node::ins_req
Node::add_prec
Node::rm_prec
Node::set_prec


Added `igvn->_worklist.push(node)` in various places that modified a `node` but did not add it to the igvn worklist.

7 times I had to push `Root`, 5 of these it was because of the creation of a `HaltNode`, which means we have a `root->add_req(halt)`. 

In one case we have a MergeMemStream node, which gets two MergeMem nodes as input, and streams over them.
Unfortunately, it modifies one of the two, which then can trigger our assertion code. I now push this node to the igvn worklist, but a better fix would be to make MergeMemStream leave the MergeMem nodes unmodified. I think that should be possible, filed an RFE [JDK-8293358](https://bugs.openjdk.org/browse/JDK-8293358)

What I am NOT doing here, and leave to a later RFE: investigate / implement these assertions for late/incremental inlining.

Ran larger regression tests, and 7-9h of fuzzing on 3 platforms.

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

Commit messages:
 - MergeMemStream: had to move igvn worklist push further out to catch more cases
 - improved MergeMemStream comment
 - adding worklist.push for a recent halt node introduction
 - Merge branch 'master' into JDK-8255670
 - 8255670: Improve C2's detection of modified nodes

Changes: https://git.openjdk.org/jdk/pull/9439/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9439&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8255670
  Stats: 21 lines in 6 files changed: 19 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/9439.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9439/head:pull/9439

PR: https://git.openjdk.org/jdk/pull/9439


More information about the hotspot-compiler-dev mailing list