RFR: 8255670: Improve C2's detection of modified nodes
Emanuel Peter
epeter at openjdk.org
Mon Sep 12 16:31:39 UTC 2022
On Sat, 9 Jul 2022 08:37:24 GMT, Emanuel Peter <epeter at openjdk.org> wrote:
> 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.
I'm back to work. Will spend time on this during the next weeks.
-------------
PR: https://git.openjdk.org/jdk/pull/9439
More information about the hotspot-compiler-dev
mailing list