RFR: 8261671: X86 I2L conversion can be skipped for certain masked positive values [v10]
Vladimir Ivanov
vlivanov at openjdk.java.net
Tue Mar 16 21:08:10 UTC 2021
On Tue, 16 Mar 2021 20:48:26 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:
>
> Address Vladimir Ivanov Suggestions
>
> Signed-off-by: Marcus G K Williams <marcus.williams at intel.com>
Looks good.
src/hotspot/cpu/x86/x86_64.ad line 3182:
> 3180: operand immI_Pow2M1()
> 3181: %{
> 3182: predicate((n->get_int() != 0)
`n->get_int() != 0` is redundant now.
-------------
Marked as reviewed by vlivanov (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/2590
More information about the hotspot-compiler-dev
mailing list