RFR: 8309502: RISC-V: String.indexOf intrinsic may produce misaligned memory loads
Vladimir Kempik
vkempik at openjdk.org
Wed Jun 7 07:13:54 UTC 2023
On Mon, 5 Jun 2023 20:52:01 GMT, Vladimir Kempik <vkempik at openjdk.org> wrote:
> Please review this attempt to remove misaligned loads in String.indexOf intrinsic on RISC-V
>
> Initialy found these misaligned loads when profiling finagle-http test from renaissance suite.
> The majority of trp_lam events (about 66k per finagle-http round) came at line 706 (https://github.com/openjdk/jdk/pull/14320/files#diff-35eb1d2f1e2f0514dd46bd7fbad49ff2c87703d5a3041a6433956df00a3fe6e6L706)
> The other two produced about 100 events combined.
> Later I've found this can partially be reproduced with StringIndexOf.advancedWithMediumSub.
> Numbers on hifive before and after applying the patch:
>
>
> Benchmark Mode Cnt Score Error Units
> StringIndexOf.advancedWithMediumSub avgt 25 47031.406 ± 144.005 ns/op
>
>
> After:
>
> Benchmark Mode Cnt Score Error Units
> StringIndexOf.advancedWithMediumSub avgt 25 4256.830 ± 23.075 ns/op
>
>
> Testing: tier1/tier2 is clean on hifive.
I'll test on thead
as for the first part of the patch, at line 494,
on this [line](https://github.com/openjdk/jdk/pull/14320/files#diff-35eb1d2f1e2f0514dd46bd7fbad49ff2c87703d5a3041a6433956df00a3fe6e6L482), we do nlen_tmp -= 7;
then we at this [line](https://github.com/openjdk/jdk/pull/14320/files#diff-35eb1d2f1e2f0514dd46bd7fbad49ff2c87703d5a3041a6433956df00a3fe6e6L494), result = haystack + nlen_tmp and read long word from result address, obviously this causes misaligned load
-------------
PR Comment: https://git.openjdk.org/jdk/pull/14320#issuecomment-1580066972
More information about the hotspot-compiler-dev
mailing list