RFR: 8341893: AArch64: Micro-optimize compressed ptr decoding
Aleksey Shipilev
shade at openjdk.org
Thu Oct 10 09:55:10 UTC 2024
On Thu, 10 Oct 2024 09:49:28 GMT, Andrew Haley <aph at openjdk.org> wrote:
>> See the bug for full description. I think there is an accidental inefficiency in decoding: we don't have to shift when shift is zero, but we are tripped by `d != s` check. Other architectures seem to do this right. This fix surgically fixes the decoding. I have a variant of a more comprehensive MacroAssembler fix that could cover this shift-to-mov translation wholesale, but that fix is riskier.
>>
>> Additional testing:
>> - [ ] Linux AArch64 server fastdebug, `tier{1,2,3}`
>
> src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 5017:
>
>> 5015: lsl(d, s, CompressedOops::shift());
>> 5016: } else if (d != s) {
>> 5017: mov(d, s);
>
> I think `MacroAssembler::mov` already does the `d != s` optimization, but perhaps it's clearer to do it here as well.
Yes, `mov` does the `d != s` optimization. I have no preference whether we do check here or rely on downstream check. Just peeling the `d != s` test from the original if-expression seems marginally easier to think about the patch impact.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21443#discussion_r1795091052
More information about the hotspot-dev
mailing list