RFR: 8367292: VectorAPI: Optimize VectorMask.fromLong/toLong() for SVE [v2]
    Xiaohong Gong 
    xgong at openjdk.org
       
    Thu Oct 23 07:25:05 UTC 2025
    
    
  
On Thu, 23 Oct 2025 06:03:13 GMT, Emanuel Peter <epeter at openjdk.org> wrote:
>> src/hotspot/share/opto/vectorIntrinsics.cpp line 627:
>> 
>>> 625:   if (!Matcher::vector_mask_requires_predicate(mopc, mask_vec->bottom_type()->is_vect())) {
>>> 626:     mask_vec = gvn().transform(VectorStoreMaskNode::make(gvn(), mask_vec, elem_bt, num_elem));
>>> 627:   }
>> 
>> What does `VectorStoreMaskNode` do exactly?
>> Could you maybe add some short comment above the class definition of `VectorStoreMaskNode`?
>> 
>> I'm guessing it turns a predicate into a packed vector, right?
>> If that is correct, then it would make more sense to check something like
>> Suggestion:
>> 
>>   if (Matcher::vector_mask_must_be_packed_vector(mopc, mask_vec->bottom_type()->is_vect())) {
>>     mask_vec = gvn().transform(VectorStoreMaskNode::make(gvn(), mask_vec, elem_bt, num_elem));
>>   }
>
> I'm wondering if the name `VectorStoreMaskNode` is even very good. Is it about storing a mask, or a mask for storing? But is it really limited to storing things, or could it also be for loads? Or is it rather a conversion?
`VectorStoreMask` is a opposite operation of `VectorLoadMask`. We can treat it as a layout conversion for a vector mask. It is used to convert a vector mask (either a unpacked vector or a predicate) to a packed vector status (i.e. 8-bit element size). Because, in Java API, elements of a `VectorMask` is stored into a boolean array.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/27481#discussion_r2454163415
    
    
More information about the hotspot-compiler-dev
mailing list