RFR: 8347997: assert(false) failed: EA: missing memory path [v2]
Christian Hagedorn
chagedorn at openjdk.org
Tue Jan 28 06:52:51 UTC 2025
On Fri, 24 Jan 2025 18:02:15 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:
>> C2's Escape Analysis does not recognize pattern where one input of memory `Phi` node is `MergeMem` node and an other is RAW store. This pattern is created by Continuation pinning intrinsic. As result EA complains about strange memory graph.
>>
>> I suggest to add second `MergeMem` between Store and Phi nodes by calling `reset_memory()`. EA recognize such patter and removes allocations.
>>
>> I checked generated assembler pinning code and it is the same as before. The only difference in the test is eliminated allocations.
>>
>> I moved Uncommon code up to avoid resetting memory - it is already done at the beginning of this intrinsic code.
>>
>> We should not use `uncommon_trap_exact()` for `Deoptimization::Action_none` - It is used for other actions to prevent changing them to `Action_none`.
>>
>> Tested tier1-5, hs-xcomp, hs-comp-stress
>> Added new regression test based on reproducer from bug report.
>
> Vladimir Kozlov has updated the pull request incrementally with one additional commit since the last revision:
>
> Update test
Otherwise, the fix looks good to me, too!
src/hotspot/share/opto/library_call.cpp line 3775:
> 3773: IfNode* iff_pin_count_over_underflow = create_and_map_if(control(), test_pin_count_over_underflow, PROB_MIN, COUNT_UNKNOWN);
> 3774:
> 3775: // True branch, pin count over/underflow.
Maybe you can add a comment here about why we do the trap first (as described in the PR description).
-------------
Marked as reviewed by chagedorn (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/23284#pullrequestreview-2577234825
PR Review Comment: https://git.openjdk.org/jdk/pull/23284#discussion_r1931618277
More information about the hotspot-compiler-dev
mailing list