8230015: [instruction selector] generic vector operands support.

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Tue Nov 19 12:40:14 UTC 2019


Short update on the progress: after extensive offline discussions 
between Jatin, Sandhya, and me, we decided to split the original patch 
into multiple independent pieces and post them for review separately.

On behalf of Jatin, I'll initiate next round of reviews shortly.

Generic vector support will be posted first (along with a couple of 
enhancements). AD instruction merges are in good shape, but still need 
more work. They'll be posted for review later.

Best regards,
Vladimir Ivanov

On 12.10.2019 03:41, Vladimir Ivanov wrote:
> Hi Jatin,
> 
> FTR I'm looking at:
>    http://cr.openjdk.java.net/~jbhateja/genericVectorOperands/webrev.03/
> 
> Good work, Jatin. The reduction in number of instructions looks 
> impressive. Also, it's nice to see excessive vec? <-> legVec? moves 
> being eliminated.
> 
> High-level comments on the patch:
> 
>    - Please, separate the patch in 2 changes: generic vector type 
> support and AD instruction unification. It would significantly simplify 
> review.
> 
>    - Try to avoid x86-specific changes (#ifdefs) in shared files.
> 
> 
> I'm still looking through the implementation, but here are the bugs in 
> AD unification spotted so far:
> 
> ====================================================================
> src/hotspot/cpu/x86/x86_64.ad:
> 
> +operand vecG() %{
> +  constraint(ALLOC_IN_RC(vectorg_reg));
> 
> +operand legVecG() %{
> +  constraint(ALLOC_IN_RC(vectorg_reg));
> 
> legVecG definition shouldn't be equivalent to vecG: on AVX512-capable 
> host legVecG should never include zmm16-zmm31 while vecG can.
> 
> 
> ====================================================================
> src/hotspot/cpu/x86/x86.ad:
> 
> +instruct ReplF_zero_avx(vecG dst, immF0 zero) %{
> +  predicate(UseAVX < 3 &&
> 
> UseAVX > 0 check is missing (same with ReplD_zero_avx).
> 
> 
> ====================================================================
> +instruct vaddB_mem(vecG dst, vecG src, memory mem) %{
> +  predicate(UseAVX && (UseAVX <= 2 || VM_Version::supports_avx512bw()) &&
> +            n->as_Vector()->length() >= 4 && n->as_Vector()->length() 
> <= 64);
> 
> It doesn't match the following case anymore:
>    UseAVX == 3 &&
>    VM_Version::supports_avx512bw() == false &&
>    n->as_Vector()->length() < 64 // smaller than 512bit
> 
> There are other AD instructions  (with VMVersion::supports_avx512bw() 
> check) which are affected the same way.
> 
> Best regards,
> Vladimir Ivanov
> 
> On 22/08/2019 09:49, Bhateja, Jatin wrote:
>> Hi All,
>>
>> Please find below a patch for generic vector operands[1] support 
>> during instruction selection.
>>
>> Motivation behind the patch is to reduce the number of vector 
>> selection patterns whose operands meagerly differ in vector lengths.
>>
>> This will not only result in lesser code being generated by ADLC which 
>> effectively translates to size reduction in libjvm.so but also
>>
>> help in better maintenance of AD files.
>>
>> Using generic operands we were able to collapse multiple vector 
>> patterns over mainline
>>
>>               Initial number of vector instruction patterns 
>> (vec[XYZSD] + legVec[ZXYSD]   : *510*
>>
>>               Reduced vector instruction patterns  (vecG + 
>> legVecG)                                  : *222*
>>
>> **
>>
>> With this we could see around 1MB size reduction in libjvm.so.
>>
>> In order to have minimal impact over downstream compiler passes, a 
>> post-selection pass has been introduced (currently enabled only for 
>> X86 target)
>>
>> which replaces these generic operands with their corresponding 
>> concreter vector length variants.
>>
>> JBS      : https://bugs.openjdk.java.net/browse/JDK-8230015
>>
>> Patch  : 
>> http://cr.openjdk.java.net/~jbhateja/genericVectorOperands/webrev.00/
>>
>> Kindly review and share your feedback.
>>
>> Best Regards,
>>
>> Jatin Bhateja
>>
>> [1] 
>> http://cr.openjdk.java.net/~jbhateja/genericVectorOperands/generic_operands_support_v1.0.pdf 
>>
>>


More information about the hotspot-compiler-dev mailing list