RFR: 8278871: [JVMCI] assert((uint)reason < 2* _trap_hist_limit) failed: oob [v2]

Vladimir Kozlov kvn at openjdk.java.net
Fri Dec 17 19:16:25 UTC 2021


On Fri, 17 Dec 2021 12:53:06 GMT, Doug Simon <dnsimon at openjdk.org> wrote:

>> This PR fixes a discrepancy between `MethodData::_trap_hist_list` and `Deoptimization::Reason_LIMIT` in terms of JVMCI specific usage.
>> 
>> JVMCI doubles the size of the deopt history for a method so that it can distinguish deopts in a normal method compilation from deopts in an OSR compilation:
>> 
>>     union {
>>       intptr_t _align;
>>       u1 _array[JVMCI_ONLY(2 *) MethodData::_trap_hist_limit];
>>     } _trap_hist;
>> 
>> 
>> To access the history for OSR deopts, the index for a deopt reason needs to be adjusted to the upper half of the history array. The amount used for the adjustment was incorrect and this PR fixes it:
>> 
>> 
>>   if (update_total_trap_count) {
>>     uint idx = reason;
>> #if INCLUDE_JVMCI
>>     if (is_osr) {
>>       idx += Reason_TRAP_HISTORY_LENGTH;
>>     }
>> #endif
>> 
>> 
>> I introduced `Reason_TRAP_HISTORY_LENGTH` as a replacement for `25 JVMCI_ONLY(+5),  // decoupled from Deoptimization::Reason_LIMIT` as this decoupling is unnecessary (as dangerous) as far as I can see.
>
> Doug Simon has updated the pull request incrementally with one additional commit since the last revision:
> 
>   use ARRAY_SIZE macro and add comments

Update looks good.

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

Marked as reviewed by kvn (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/6855


More information about the hotspot-dev mailing list