RFR: 8288294: [vector] Add Identity/Ideal transformations for vector logic operations

Xiaohong Gong xgong at openjdk.org
Thu Jun 30 02:53:33 UTC 2022


On Thu, 30 Jun 2022 02:41:43 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:

>> This patch adds the following transformations for vector logic operations such as "`AndV, OrV, XorV`", incuding:
>> 
>>   (AndV v (Replicate m1))   => v
>>   (AndV v (Replicate zero)) => Replicate zero
>>   (AndV v v)                => v
>> 
>>   (OrV v (Replicate m1))    => Replicate m1
>>   (OrV v (Replicate zero))  => v
>>   (OrV v v)                 => v
>> 
>>   (XorV v v)                => Replicate zero
>> 
>> where "`m1`" is the integer constant -1, together with the same optimizations for vector mask operations like "`AndVMask, OrVMask, XorVMask`".
>
> src/hotspot/share/opto/vectornode.cpp line 1869:
> 
>> 1867:   // (XorV src src)      => (Replicate zero)
>> 1868:   // (XorVMask src src)  => (MaskAll zero)
>> 1869:   //
> 
> Do we really need this? Is `Replicate` asm instruction faster than `XorV`? I understand it may help reduce registers pressure.

Thanks for looking at this patch! I think the main benefit is "(Replicate zero)" is loop invariant which could be hoist outside of the loop.

-------------

PR: https://git.openjdk.org/jdk/pull/9211


More information about the hotspot-compiler-dev mailing list