RFR: 8261671: X86 I2L conversion can be skipped for certain masked positive values [v5]
    Vladimir Kozlov 
    kvn at openjdk.java.net
       
    Thu Mar  4 19:55:55 UTC 2021
    
    
  
On Wed, 3 Mar 2021 22:00:59 GMT, Marcus G K Williams <github.com+168222+mgkwill at openjdk.org> wrote:
>> 8261671: X86 I2L conversion can be skipped for certain masked positive values
>> 
>> For the following expression:
>>  (long)(value & mask)
>> Where value is of int type and mask is constant (power of two – 1), we can directly generate bzhi instruction to zero the upper bits instead of doing an andl, followed by movslq
>> 
>> Before:
>> Benchmark Mode Cnt Score Error Units
>> SkipIntToLongCast.skipMaskedSmallPositiveCast avgt 15 10.679 ± 1.496 ns/op
>> 
>> 
>> After:
>> Benchmark Mode Cnt Score Error Units
>> SkipIntToLongCast.skipMaskedSmallPositiveCast avgt 15 7.870 ± 0.067 ns/op
>> 
>> Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>
>
> Marcus G K Williams has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Clean up Expr.java & assembler_x86.hpp
>   
>   Remove unneeded bzhi in assembler_x86.hpp
>   and unused longExpr's in Expr.java
>   
>   Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>
test/hotspot/jtreg/compiler/codegen/BMI2.java line 45:
> 43:             long z = BMITests.bzhiI2L(ix, i);
> 44: 
> 45:             for (int i2 = 0; i2 < ITERATIONS; i2++) {
I know that you follow BMI.java code example but we need to update these tests. Since you are writing new test you may do it right. See discussion for https://github.com/openjdk/jdk/pull/2811
And, please, don't use 1000,000 iterations. C2 compilation is triggered with 10,000. So 50,000 would be more than enough.
-------------
PR: https://git.openjdk.java.net/jdk/pull/2590
    
    
More information about the hotspot-compiler-dev
mailing list