[jdk16] RFR: 8255120: C2: assert(outer->outcnt() >= phis + 2 && outer->outcnt() <= phis + 2 + stores + 1) failed: only phis

Tobias Hartmann thartmann at openjdk.java.net
Wed Jan 13 08:03:59 UTC 2021


On Tue, 12 Jan 2021 22:16:54 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:

> JDK-8255000 made post-loopopts IGVN processing predictable, but also reordered it with macro node expansion.
> 
> It turned out that macro node expansion is sensitive to narrower types post-loopopts IGVN generates and it either triggers the aforementioned assert or produces less efficient code (some runtime checks aren't eliminated anymore and it adds up some overhead, see JDK-8255705 for details).
> 
> I'll file a separate RFE to make macro node expansion more robust (and relax the problematic assert), but for now (jdk16) I propose to restore the original order of transformations.
> 
> Testing:
> - [x] failing test
> - [x] hs-tier1 - hs-tier6
> - [x] SPECjvm2008 MPEG
> - [x] gc/shenandoah/

Looks good to me. Can JDK-8255705 be closed as duplicate or are there other performance issues left?

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

Marked as reviewed by thartmann (Reviewer).

PR: https://git.openjdk.java.net/jdk16/pull/113


More information about the hotspot-compiler-dev mailing list