[jdk17] RFR: 8268884: C2: Change to meet_speculative in phase CCP assert [v2]
Vladimir Kozlov
kvn at openjdk.java.net
Tue Jun 29 15:34:04 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
Please, add comments in both places explaining why we changed direction (from inputs to outputs).
Otherwise based on Roland and your comment fix seems fine.
-------------
Changes requested by kvn (Reviewer).
PR: https://git.openjdk.java.net/jdk17/pull/170
More information about the hotspot-compiler-dev
mailing list