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

Vladimir Ivanov vlivanov at openjdk.java.net
Wed Jan 13 08:25:01 UTC 2021


On Wed, 13 Jan 2021 08:00:59 GMT, Tobias Hartmann <thartmann 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?

Thanks, Tobias.

> Can JDK-8255705 be closed as duplicate or are there other performance issues left?

I don't have a conclusive answer yet. The fix does improve MPEG score a bit, but it is still slower than jdk-16+20.

jdk-16.latest  150.391 +- 0.361  ops/min
jdk-16.fix     151.212 +- 0.356  ops/min

jdk-16+20      152.267 +- 0.378  ops/min
jdk-16+21      150.343 +- 0.294  ops/min

Will conduct additional performance experiments before deciding what to do with JDK-8255705.

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

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


More information about the hotspot-compiler-dev mailing list