RFR: 8318509: x86 count_positives intrinsic broken for -XX:AVX3Threshold=0 [v2]

Emanuel Peter epeter at openjdk.org
Tue Oct 24 09:05:39 UTC 2023


On Mon, 23 Oct 2023 19:22:52 GMT, Claes Redestad <redestad at openjdk.org> wrote:

>> The AVX-512 implementation of count_positives is broken when there are negative values in the tail block, since the len register is repurposed to then re-read as-if it still contained the original value. 
>> 
>> Proposed fix is to restore len from the value in tmp1, which at this point holds the count of bytes in the tail. 
>> 
>> Existing TestCountPositives test is pretty exhaustive and just needs to be run explicitly with AVX3Threshold=0 enabled.
>
> Claes Redestad has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Remove redundant 0 + tail
>  - Randomize array segment sizes and the amount of negatives. Add some tests that limit negatives to a tail.

test/hotspot/jtreg/compiler/intrinsics/string/TestHasNegatives.java line 118:

> 116:         initialize(off, len, maxNegatives);
> 117:         boolean r = Helper.StringCodingHasNegatives(bytes, off, len);
> 118:         if (r ^ ((maxNegatives == 0) ? false : true)) {

This condition looks very obscure. Is it not equivalent to: `r ^ maxNegatives != 0`
Or even `r == (maxNegatives == 0)`?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16267#discussion_r1369843021


More information about the hotspot-compiler-dev mailing list