RFR: 8338023: Support two vector selectFrom API [v10]

Jatin Bhateja jbhateja at openjdk.org
Tue Sep 17 07:10:55 UTC 2024


On Mon, 16 Sep 2024 18:35:42 GMT, Paul Sandoz <psandoz at 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


More information about the hotspot-compiler-dev mailing list