On Mon, 16 Sep 2024 18:35:42 GMT, Paul Sandoz <psan...@openjdk.org> wrote:

>> Jatin Bhateja has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   Disabling VectorLoadShuffle bypassing optimization to comply with 
>> rearrange semantics at IR level.
>
> src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template
>  line 561:
> 
>> 559:         for (int i = 0; i < vlen; i++) {
>> 560:             int index = ((int)vecPayload1[i]);
>> 561:             res[i] = index >= vlen ? vecPayload3[index & (vlen - 1)] : 
>> vecPayload2[index];
> 
> This is incorrect as the index could be negative. You need to wrap in the 
> range `[0, 2 * vlen - 1]` before the comparison and selection.
> 
> int index = ((int)vecPayload1[i]) & ((vlen << 1) - 1));
> res[i] = index < vlen ? vecPayload2[index] : vecPayload3[index - vlen];

Hi @PaulSandoz , we already pass wrapped indexes to this helper routine called 
from fallback implementation.

> src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template
>  line 2974:
> 
>> 2972:     final $abstractvectortype$ selectFromTemplate(Class<? extends 
>> Vector<$Boxbitstype$>> indexVecClass,
>> 2973:                                                   $abstractvectortype$ 
>> v1, $abstractvectortype$ v2) {
>> 2974:         int twoVectorLen = length() * 2;
> 
> We should assert that the length is a power of two.

API only accepts vector parameters and there is no means though public facing 
API to create a vector of NPOT sizes.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20508#discussion_r1762504366
PR Review Comment: https://git.openjdk.org/jdk/pull/20508#discussion_r1762504318

Reply via email to