RFR: 8257197: Add additional verification code to PhaseCCP [v4]

Emanuel Peter epeter at openjdk.org
Thu Dec 8 08:46:14 UTC 2022


> **Targetted for JDK-21.**
> 
> We have had many bugs that could be tracked back to missing optimizations during PhaseCCP.
> Often the problem is that a node `x` has an input (of input of input) `y` which is modified, but `y` does not notify `x` (does not push it to the worklist). For one this is a missed opportunity to optimize, but it can also lead to failed assumptions later: often we assume that all that can be optimize is already optimized.
> This verification helps us debug faster, and can also help when `Value` optimizations suddenly do further-reaching traversals, which would require further-reaching notifications.
> 
> Sadly, the verification is not total: we have some exceptions. Especially for `LoadNode`, which perform a walk up the memory inputs, which can go arbitrarily far, to look for relates `StoreNode`s. Notification would thus have to put very many nodes on the worklist. The question is if the potential additional optimization is worth the compile-time. If we decided yes, then one we might want to implement a listener-style notification: when a node visits inputs during `Value`, it could subscribe to all (or the relevant) visited input-nodes for future updates. Currently, we just mostly do fixed 1-hop or 2-hop notification of output nodes.
> 
> FYI: I plan to do a similar verification, and a refactoring of `PhaseCCP::push_child_nodes_to_worklist` and `PhaseIterGVN::add_users_to_worklist` in [JDK-8298094](https://bugs.openjdk.org/browse/JDK-8298094).

Emanuel Peter has updated the pull request incrementally with one additional commit since the last revision:

  Apply suggestions from code review
  
  Thanks Christian
  
  Co-authored-by: Christian Hagedorn <christian.hagedorn at oracle.com>

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/11529/files
  - new: https://git.openjdk.org/jdk/pull/11529/files/db08362b..35302e3d

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=11529&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=11529&range=02-03

  Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/11529.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11529/head:pull/11529

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


More information about the hotspot-compiler-dev mailing list