RFR: 8360192: C2: Make the type of count leading/trailing zero nodes more precise [v16]
    Emanuel Peter 
    epeter at openjdk.org
       
    Tue Oct 28 10:07:26 UTC 2025
    
    
  
On Wed, 15 Oct 2025 08:57:33 GMT, Qizheng Xing <qxing at openjdk.org> wrote:
>> 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 incrementally with one additional commit since the last revision:
> 
>   Fix include order
@MaxXSoft Ok, now it looks really good. I have one minor nit.
Running some internal testing now.
test/hotspot/jtreg/compiler/c2/gvn/TestCountBitsRange.java line 84:
> 82:         LIMITS_64_5 = INTS_64.next();
> 83:         LIMITS_64_6 = INTS_64.next();
> 84:         LIMITS_64_7 = INTS_64.next();
Why not assign them directly? You just need to declare the generators first. Would save us a couple of lines.
-------------
PR Review: https://git.openjdk.org/jdk/pull/25928#pullrequestreview-3377615582
PR Review Comment: https://git.openjdk.org/jdk/pull/25928#discussion_r2461105244
    
    
More information about the hotspot-compiler-dev
mailing list