On Sun, 5 Nov 2023 12:58:57 GMT, Jatin Bhateja <jbhat...@openjdk.org> wrote:

>> src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp line 1606:
>> 
>>> 1604: void C2_MacroAssembler::vpgather8b_offset(BasicType elem_bt, 
>>> XMMRegister dst, Register base, Register idx_base,
>>> 1605:                                           Register offset, Register 
>>> rtmp, int vlen_enc) {
>>> 1606:   vpxor(dst, dst, dst, vlen_enc);
>> 
>> Why the vpxor here and in vpgather8b. These are not masked gathers.
>
> This is to clear the vector gathering 8 subwords with each iteration.

This is not a masked operation so every lane of dst will be written through 
pinsrw/pinsrb. An vpxor before is not required.

>> src/hotspot/cpu/x86/x86.ad line 1921:
>> 
>>> 1919:     case Op_LoadVectorGatherMasked:
>>> 1920:       if (!is_subword_type(bt) && size_in_bits < 512 && 
>>> !VM_Version::supports_avx512vl()) {
>>> 1921:         return false;
>> 
>> Also need to return false when size_in_bits == 64 for non subword types.
>
> match_rule_supported_vector  called in the beginning will enforce these 
> checks.

This method is match_rule_support_vector and it is not enforcing this check 
now. It was doing so before through fall through.

>> src/hotspot/cpu/x86/x86.ad line 1939:
>> 
>>> 1937:       // fallthrough
>>> 1938:     case Op_LoadVectorGather:
>>> 1939:       if (!is_subword_type(bt) && size_in_bits == 64 ) {
>> 
>> Since this is a fallthrough case, the change also applies to 
>> StoreVectorScatter*.  The !is_subword_type() is needed only for 
>> LoadVectorGather.
>
> We do not intrinsify sub-word scatter operations currently.

The StoreVectorScatter* should return false when size_in_bits == 64 
irrespective of subword.  It was doing so before and is not doing so now.

>> src/hotspot/share/opto/vectorIntrinsics.cpp line 1579:
>> 
>>> 1577:   Node* index    = argument(11);
>>> 1578:   Node* indexMap = argument(12);
>>> 1579:   Node* indexM   = argument(13);
>> 
>> Could be renamed as follows for better understanding: index -> offset, 
>> indexM -> indexOffset. Also this should be moved under else part of if 
>> (is_scatter).
>
> Naming scheme is based on the actual names used in intrinsic entry point for 
> these arguments.

How about moving this to else part as we are not using these for Scatter?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16354#discussion_r1383795523
PR Review Comment: https://git.openjdk.org/jdk/pull/16354#discussion_r1383799090
PR Review Comment: https://git.openjdk.org/jdk/pull/16354#discussion_r1383803037
PR Review Comment: https://git.openjdk.org/jdk/pull/16354#discussion_r1383818954

Reply via email to