On Tue, 21 Mar 2023 16:29:44 GMT, Paul Sandoz <psan...@openjdk.org> wrote:

>> I have moved most of the methods to `AbstractVector` and `AbstractShuffle`, 
>> I have to resort to raw types, though, since there seems to be no way to do 
>> the same with wild cards, and the generics mechanism is not powerful enough 
>> for things like `Vector<E.integral>`. The remaining failure seems to be 
>> related to 
>> [JDK-8304676](https://bugs.openjdk.org/projects/JDK/issues/JDK-8304676), so 
>> I think this patch is ready for review now.
>> 
>>> The mask implementation is specialized by the species of vectors it 
>>> operates on, but does it have to be
>> 
>> Apart from the mask implementation, shuffle implementation definitely has to 
>> take into consideration the element type. However, this information does not 
>> have to be visible to the API, similar to how we currently handle the vector 
>> length, we can have `class AbstractMask<E> implements VectorMask`. As a 
>> result, the cast method would be useless and can be removed in the API, but 
>> our implementation details would still use it, for example
>> 
>>     Vector<E> blend(Vector<E> v, VectorMask w) {
>>         AbstractMask<?> aw = (AbstractMask<?>) w;
>>         AbstractMask<E> tw = aw.cast(vspecies());
>>         return VectorSupport.blend(...);
>>     }
>> 
>>     Vector<E> rearrange(VectorShuffle s) {
>>         AbstractShuffle<?> as = (AbstractShuffle<?>) s;
>>         AbstractShuffle<E> ts = s.cast(vspecies());
>>         return VectorSupport.rearrangeOp(...);
>>     }
>> 
>> What do you think?
>
>> Apart from the mask implementation, shuffle implementation definitely has to 
>> take into consideration the element type.
> 
> Yes, the way you have implemented shuffle is tightly connected, that looks ok.
> 
> I am wondering if we can make the mask implementation more loosely coupled 
> and modified such that it does not have to take into consideration the 
> element type (or species) of the vector it operates on, and instead 
> compatibility is based solely on the lane count.
> 
> Ideally it would be good to change the `VectorMask::check` method to just 
> compare the lanes counts and not require a cast in the implementation, which 
> i presume requires some deeper changes in C2?
> 
> What you propose seems a possible a interim step towards a more preferable 
> API, if the performance is good.

> Thanks @PaulSandoz and @XiaohongGong for the reviews and testings.

Running tier2/3 tests.

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

PR Comment: https://git.openjdk.org/jdk/pull/13093#issuecomment-1492274813

Reply via email to