[jdk17] RFR: 8268884: C2: Change to meet_speculative in phase CCP assert [v2]

Roland Westrelin roland at openjdk.java.net
Tue Jun 29 14:06:05 UTC 2021


On Tue, 29 Jun 2021 12:03:35 GMT, Nils Eliasson <neliasso at openjdk.org> wrote:

>> Hi,
>> 
>> The test fails on "assert(t->meet(t0) == t) failed: Not monotonic" in PhaseCCP for a CheckCastPPNode. The test is really simple. The CheckCastPP is hanging of the ParmNode for the 'this' pointer. The user of this is a call, with an infinite empty loop, that gets inlined. The loop will have a safepoint that keeps the JVM State - the CheckCastPP is kept alive by that SafePointNode.
>> 
>> The assert triggers because the type for the CheckCastPP has a speculative part. In the assert "assert(t->meet(t0) == t) failed: Not monotonic" - t is the type evaluated for the CheckCastPP, t0 is the previous type (from _types map), which has not been updated yet and is still Type::Top. 
>> 
>> t->meet(t0) will drop the speculative part and fail the comparison.
>> 
>> Suggested fix - change meet to meet_specualtive that will keep the speculative part.
>> 
>> Please review,
>> Best regards,
>> Nils Eliasson
>
> Nils Eliasson has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Revert meet change
>  - Remove speculative types from top to bottom

Looks good to me.

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

Marked as reviewed by roland (Reviewer).

PR: https://git.openjdk.java.net/jdk17/pull/170


More information about the hotspot-compiler-dev mailing list