RFR: 8255000: C2: Unify IGVN processing when loop opts are over
Nils Eliasson
neliasso at openjdk.java.net
Tue Oct 20 16:04:14 UTC 2020
On Mon, 19 Oct 2020 20:27:40 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
> 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
There is a lot to like in this cleanup. Thanks!
Reviewed.
-------------
Marked as reviewed by neliasso (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/751
More information about the shenandoah-dev
mailing list