RFR: 8360192: C2: Make the type of count leading/trailing zero nodes more precise [v15]
Qizheng Xing
qxing at openjdk.org
Tue Oct 14 06:08:41 UTC 2025
> The result of count leading/trailing zeros is always non-negative, and the maximum value is integer type's size in bits. In previous versions, when C2 can not know the operand value of a CLZ/CTZ node at compile time, it will generate a full-width integer type for its result. This can significantly affect the efficiency of code in some cases.
>
> This patch makes the type of CLZ/CTZ nodes more precise, to make C2 generate better code. For example, the following implementation runs ~115% faster on x86-64 with this patch:
>
>
> public static int numberOfNibbles(int i) {
> int mag = Integer.SIZE - Integer.numberOfLeadingZeros(i);
> return Math.max((mag + 3) / 4, 1);
> }
>
>
> Testing: tier1, IR test
Qizheng Xing has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 21 commits:
- Merge branch 'master' into enhance-clz-type
- Merge branch 'master' into enhance-clz-type
- Fix constant fold
- Remove redundant import
- Add random range tests
- Add more comments to IR test
- Add more constant folding tests for CLZ/CTZ
- Add proof of correstness comments
- Remove redundant `@require` in IR test
- Add microbench
- ... and 11 more: https://git.openjdk.org/jdk/compare/5bf1bab5...d7ebc8f2
-------------
Changes: https://git.openjdk.org/jdk/pull/25928/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25928&range=14
Stats: 820 lines in 4 files changed: 754 ins; 54 del; 12 mod
Patch: https://git.openjdk.org/jdk/pull/25928.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/25928/head:pull/25928
PR: https://git.openjdk.org/jdk/pull/25928
More information about the hotspot-compiler-dev
mailing list