RFR: 8304138: [JVMCI] Test FailedSpeculation existence before appending. [v3]
Yudi Zheng
yzheng at openjdk.org
Sat Mar 18 08:45:20 UTC 2023
On Fri, 17 Mar 2023 16:08:38 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:
>> Yes, it would do what you are saying but I don't like infinite loops like that with conditional exists.
>> How big length of `failed_speculations_address` list you can have?
>> Consider implementing it as recursive method if depth is not big:
>>
>> bool FailedSpeculation::add_failed_speculation(nmethod* nm, FailedSpeculation** failed_speculations_address, address speculation, int speculation_len) {
>> assert(failed_speculations_address != nullptr, "must be");
>> guarantee_failed_speculations_alive(nm, failed_speculations_address);
>>
>> size_t fs_size = sizeof(FailedSpeculation) + speculation_len;
>> FailedSpeculation* fs = new (fs_size) FailedSpeculation(speculation, speculation_len);
>> if (fs == nullptr) {
>> // no memory -> ignore failed speculation
>> return false;
>> }
>> guarantee(is_aligned(fs, sizeof(FailedSpeculation*)), "FailedSpeculation objects must be pointer aligned");
>>
>> if (!add_failed_speculation_recursive(failed_speculations_address, fs)) {
>> delete fs;
>> return false;
>> }
>> return true;
>> }
>>
>> bool add_failed_speculation_recursive(FailedSpeculation** cursor, FailedSpeculation* fs) {
>> if (*cursor == nullptr) {
>> FailedSpeculation* old_fs = Atomic::cmpxchg(cursor, (FailedSpeculation*) nullptr, fs);
>> if (old_fs == nullptr) {
>> // Successfully appended fs to end of the list
>> return true;
>> }
>> guarantee(*cursor != nullptr, "cursor must point to non-null FailedSpeculation");
>> }
>> // check if the current entry matches this thread's failed speculation
>> int speculation_len = fs->data_len();
>> if ((*cursor)->data_len() == speculation_len && memcmp(fs->data(), (*cursor)->data(), speculation_len) == 0) {
>> return false;
>> }
>> return add_failed_speculation_recursive((*cursor)->next_adr(), fs);
>> }
>
>> @vnkozlov your suggestion eagerly allocates a new `FailedSpeculation`. I'm also generally allergic to infinite loops but I don't want to ever have to worry about a stack overflow in this code as it will crash the VM. I think we should leave Yudi's code in its current form.
>
> Okay. You are the "boss" for this code ;^)
@vnkozlov @dougxc thanks for the review! I will keep it as is then.
-------------
PR: https://git.openjdk.org/jdk/pull/13022
More information about the hotspot-compiler-dev
mailing list