RFR: 8255000: C2: Unify IGVN processing when loop opts are over [v2]

Vladimir Ivanov vlivanov at openjdk.java.net
Wed Oct 21 08:14:30 UTC 2020


> There is a number of use cases when ideal nodes (either individual or even the whole classes) delay some
> transformations until loop optimizations are over.
> Unfortunately, there are multiple solutions in the code base with their pros and cons: either a custom per-node class
> logic (e.g., for range check dependent `CastII` or `Opaque4` nodes) or `Compile::major_progress() == 0` as a signal
> that loop opts are over.     I propose to introduce a unified approach to reliably process nodes that require (or may
> benefit from) IGVN pass once loop opts are finally over and migrate existing use cases to it.
> After some experimentation, I decided not to rely on `Compile::major_progress()` because:
>   * it's hard to reason about its properties (there are many places where it is adjusted);
>   * attempts to verify its monotonicity using asserts triggered too many sporadic failures.
> 
> So, I wasn't persuaded that `Compile::major_progress() == 0` is reliable enough and introduced a dedicated flag
> (`Compile::post_loop_opts_phase()`) which signals that loop opts are over.
> (The patch - 69a93d4 commit - is on top of 8255026 cleanup which is reviewed separately.)
> 
> Testing: tier1-tier5

Vladimir Ivanov has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev
excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since
the last revision:

 - Merge branch 'master' into 8255000+8255026
 - Unify post loop opts IGVN
 - 8255026: C2: Miscellaneous cleanups in Compile and PhaseIdealLoop code

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/751/files
  - new: https://git.openjdk.java.net/jdk/pull/751/files/69a93d4d..590a6493

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=751&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=751&range=00-01

  Stats: 35020 lines in 471 files changed: 24314 ins; 8566 del; 2140 mod
  Patch: https://git.openjdk.java.net/jdk/pull/751.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/751/head:pull/751

PR: https://git.openjdk.java.net/jdk/pull/751


More information about the shenandoah-dev mailing list