On Tue, 26 Nov 2024 18:11:59 GMT, Quan Anh Mai <qa...@openjdk.org> wrote:

>> src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Int256Vector.java
>>  line 870:
>> 
>>> 868:         @Override
>>> 869:         public final Int256Shuffle rearrange(VectorShuffle<Integer> 
>>> shuffle) {
>>> 870:             return (Int256Shuffle) 
>>> toBitsVector().rearrange(((Int256Shuffle) shuffle)
>> 
>> I think the cast is redundant for all vector kinds. Similarly the explicit 
>> cast is redundant for the integral vectors, perhaps in the template separate 
>> out the expressions to avoid it where not needed?
>> 
>> We could also refer to `VSPECIES` directly rather than calling `vspecies()`, 
>> same applies in other methods in the concrete vector classes.
>
> The cast is added so that we have the concrete type of the shuffle, the 
> result of `toShuffle` is only `VectorShuffle<Integer>`

Ah i see now, you want to ensure an invocation to the final/concrete method. 
(The IDE's highlighting of the redundant cast is misleading)

>> src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Int256Vector.java
>>  line 908:
>> 
>>> 906:         }
>>> 907: 
>>> 908:         private static boolean indicesInRange(int[] indices) {
>> 
>> Since this method is only called from an assert statement in the constructor 
>> we could avoid the clever checking that assertions are enabled and the 
>> explicit throwing on an AssertionError by using a second expression that 
>> produces an error message when the assertion fails : e.g.,
>> 
>>             assert indicesInRange(indices) : 
>> outOfBoundsAssertMessage(indices);
>
> Yes you are right, since this method is only called in `assert` I think we 
> can just remove the `assert` trick inside instead.

That's fine too.

>> src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java 
>> line 2473:
>> 
>>> 2471:     final <F>
>>> 2472:     VectorShuffle<F> toShuffle(AbstractSpecies<F> dsp, boolean wrap) {
>>> 2473:         assert(dsp.elementSize() == vspecies().elementSize());
>> 
>> Even though we force inline I cannot quite decide if it is better to forego 
>> the assert since it unduly increases method size. Regardless it may be 
>> useful to place the partial wrapping logic in a separate method, given it is 
>> less likely to be used.
>
> You don't have to worry too much about inlining of Vector API methods since 
> it is done during late inlining and we have a pretty huge budget there.

Ok, my comment was motivated by some feedback on the FFM API where IIRC forced 
inline limits were reached.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21042#discussion_r1872036603
PR Review Comment: https://git.openjdk.org/jdk/pull/21042#discussion_r1872037914
PR Review Comment: https://git.openjdk.org/jdk/pull/21042#discussion_r1872037711

Reply via email to