Hi All, On x86, C2 currently implements vector count trailing zeros using following formula :-
` ctz(x) = width - clz((x - 1) & ~x) ` On targets supporting AVX-512 BITALG or AVX512_VPOPCNTDQ features , we can use following shorter identity:- ` ctz(x) = popcount((x - 1) & ~x) ` This will enable `vpopcntb/w` for byte/short lanes and `vpopcntd/q` for int/long lanes. Existing lowering should remain as the fallback when these CPU features are unavailable. Following are the performance number of benchmark included with the patch. System: AMD EPYC 9755 128-Core Processor (Turin) Fixed frequency 2.5Ghz Baseline:- ---------- Benchmark Mode Cnt Score Error Units VectorCountTrailingZerosBenchmark.byteThroughput thrpt 2 569.742 ops/us VectorCountTrailingZerosBenchmark.intThroughput thrpt 2 1378.783 ops/us VectorCountTrailingZerosBenchmark.longThroughput thrpt 2 1154.720 ops/us VectorCountTrailingZerosBenchmark.shortThroughput thrpt 2 717.462 ops/us VectorCountTrailingZerosBenchmark.byteLatency avgt 2 7.848 ns/op VectorCountTrailingZerosBenchmark.intLatency avgt 2 3.328 ns/op VectorCountTrailingZerosBenchmark.longLatency avgt 2 3.284 ns/op VectorCountTrailingZerosBenchmark.shortLatency avgt 2 5.017 ns/op Withopt:- ---------- Benchmark Mode Cnt Score Error Units VectorCountTrailingZerosBenchmark.byteThroughput thrpt 2 1174.785 ops/us VectorCountTrailingZerosBenchmark.intThroughput thrpt 2 1098.933 ops/us VectorCountTrailingZerosBenchmark.longThroughput thrpt 2 1396.755 ops/us VectorCountTrailingZerosBenchmark.shortThroughput thrpt 2 1193.041 ops/us VectorCountTrailingZerosBenchmark.byteLatency avgt 2 2.352 ns/op VectorCountTrailingZerosBenchmark.intLatency avgt 2 2.344 ns/op VectorCountTrailingZerosBenchmark.longLatency avgt 2 2.345 ns/op VectorCountTrailingZerosBenchmark.shortLatency avgt 2 2.338 ns/op Kindly review and share your feedback. Best Regards, Jatin --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - Adding comments - 8393511: Optimize x86 vector count trailing zeros using popcount instructions Changes: https://git.openjdk.org/jdk/pull/33863/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=33863&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8393511 Stats: 235 lines in 4 files changed: 232 ins; 0 del; 3 mod Patch: https://git.openjdk.org/jdk/pull/33863.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/33863/head:pull/33863 PR: https://git.openjdk.org/jdk/pull/33863
