RFR: 8354242: VectorAPI: combine vector not operation with compare [v9]

erifan duke at openjdk.org
Tue Jul 8 06:00:39 UTC 2025


On Mon, 7 Jul 2025 09:32:42 GMT, erifan <duke at openjdk.org> wrote:

>> src/hotspot/share/opto/vectornode.cpp line 2243:
>> 
>>> 2241:       !VectorNode::is_all_ones_vector(in2)) {
>>> 2242:     return nullptr;
>>> 2243:   }
>> 
>> Suggestion:
>> 
>>   if (in1->Opcode() != Op_VectorMaskCmp ||
>>       in1->outcnt() != 1 ||
>>       !(in1->as_VectorMaskCmp())->predicate_can_be_negated() ||
>>         !VectorNode::is_all_ones_vector(in2)) {
>>     return nullptr;
>>   }
>> 
>> Indentation for clarity.
>> 
>> Currently, you exiting if one of these is the case:
>> 1. Not `MaskCmp`
>> 2. More than one use
>> 3. predicate cannot be negated AND the vector is all ones. Can you explain this condition? Do you have tests for cases:
>>    - predicate negatable and vector not all ones
>>    - predircate not negatable and vector not all ones
>>    - predicate negatable and vector all ones
>>    - predicate not negatable and vectors all ones
>>  
>> Why do you guard against `VectorNode::is_all_ones_vector(in2)` at all?
>> 
>> The condition for 3. is easy to get wrong, so good testing is important here :)
>
> The current testing status for the conditions you listed:
>> 1. Not MaskCmp.
> 
> **No test for it, tested locally**, Because I think this condition is too straightforward.
> 
>> 2. More than one use.
> 
> **Tested**, see `VectorMaskCompareNotTest.java line 1118`.
> 
>> predicate negatable and vector not all ones. 
> 
> **Tested**, see `VectorMaskCompareNotTest.java line 1126`.
> 
>> predicate not negatable and vector not all ones. 
> 
> **No test for it**, because we have tests for `predicate not negatable` or `vector not all ones`. If either is `false`, return nullptr.
> 
>> predicate negatable and vector all ones. 
> 
> **A lot of tests for it**. For example `VectorMaskCompareNotTest.java line 1014`.
> 
>> predicate not negatable and vectors all ones. 
> 
> **Tested**, see `VectorMaskCompareNotTest.java line 1222`.

> Indentation for clarity.

Done.

I think we have enough negative tests. Please take a look at this PR, thanks~

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24674#discussion_r2191550171


More information about the core-libs-dev mailing list