RFR: JDK-8297660: x86: Redundant test+jump in C1 allocateArray [v3]
Thomas Stuefe
stuefe at openjdk.org
Mon Nov 28 12:45:08 UTC 2022
On Mon, 28 Nov 2022 07:37:35 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:
>> In `C1_MacroAssembler::initialize_body()` we test the input array length for 0. We do this again in `MacroAssembler::zero_memory()`. This results in a redundant test+jump instruction:
>>
>>
>> 13442 0x00007f58a8ca2f02: sub $0x10,%rsi
>> 13443 0x00007f58a8ca2f06: je 0x00007f58a8ca2f26 <<
>> 13444 0x00007f58a8ca2f0c: test %rsi,%rsi
>> 13445 0x00007f58a8ca2f0f: je 0x00007f58a8ca2f26 <<
>> 13446 0x00007f58a8ca2f15: xor %rbx,%rbx
>> 13447 0x00007f58a8ca2f18: shr $0x3,%rsi
>> 13448 0x00007f58a8ca2f1c: mov %rbx,0x8(%rax,%rsi,8)
>> 13449 0x00007f58a8ca2f21: dec %rsi
>> 13450 0x00007f58a8ca2f24: jne 0x00007f58a8ca2f1c ;*anewarray {reexecute=0 rethrow=0 return_oop=0}
>> 13451 ; - java.lang.invoke.MethodHandles::<clinit>@24 (line 5109)
>>
>>
>> Since `MacroAssembler::zero_memory()` is only ever called from `C1_MacroAssembler::initialize_body()`, it does not need to test for len=0, since its caller already does.
>>
>> ---
>>
>> Patch removes one test+jump and adds an assertion for len>0 to zero_memory.
>>
>> Patch ran through SAP nightlies and GHAs.
>
> Thomas Stuefe has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
>
> - Merge branch 'master' into double-test-allocate-array
> - remove outer conditional jump
> - Revert "remove-redundant-test-from-zeromemory"
>
> This reverts commit 4f95969d4d3026ce2310230c37f469579dc32e88.
> - remove-redundant-test-from-zeromemory
x86 error for `jshell/Test8294583.java` unrelated.
Thanks, @y1yang0 and @theRealAph for reviewing.
-------------
PR: https://git.openjdk.org/jdk/pull/11372
More information about the hotspot-dev
mailing list