RFR: 8350468: x86: Improve implementation of vectorized numberOfLeadingZeros for int and long [v2]
Jasmine Karthikeyan
jkarthikeyan at openjdk.org
Wed Nov 5 01:28:31 UTC 2025
> Hi all,
> This is a patch that optimizes the x86 backend implementation of `CountLeadingZerosV` for int and long. In the review of [JDK-8349637)](https://bugs.openjdk.org/browse/JDK-8349637) an [optimized algorithm]( https://github.com/openjdk/jdk/pull/23579#issuecomment-2661332497) was proposed by @rgiulietti, which this PR implements. For integer operands, the optimized algorithm reduces the number of vector instructions from 19 to 13. The same algorithm does not work for long operands, however, since avx2 lacks a vectorized long->double conversion instruction. Instead, I found an optimized algorithm to reuse the code for int and compute the leading zeros for long with only 4 additional instructions. I added a benchmark and on my Zen 3 machine I get these results:
>
> Baseline Patch
> Benchmark Mode Cnt Score Error Units Score Error Units Improvement
> LeadingZeros.testInt avgt 15 91.097 ± 3.276 ns/op 68.665 ± 1.740 ns/op (+ 28.1%)
> LeadingZeros.testLong avgt 15 342.545 ± 4.470 ns/op 228.668 ± 5.994 ns/op (+ 39.9%)
>
> I've updated the unit tests to more thoroughly test longs and they pass on my machine. Thoughts and reviews would be appreciated!
Jasmine Karthikeyan 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 three additional commits since the last revision:
- Fix typo in comment
- Merge branch 'master' into optimize-leading-zero
- Optimize numberOfLeadingZeros
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/26610/files
- new: https://git.openjdk.org/jdk/pull/26610/files/7e207220..05195505
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=26610&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=26610&range=00-01
Stats: 379610 lines in 5554 files changed: 260632 ins; 84059 del; 34919 mod
Patch: https://git.openjdk.org/jdk/pull/26610.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/26610/head:pull/26610
PR: https://git.openjdk.org/jdk/pull/26610
More information about the hotspot-compiler-dev
mailing list