RFR: 8318509: x86 count_positives intrinsic broken for -XX:AVX3Threshold=0
Jatin Bhateja
jbhateja at openjdk.org
Thu Oct 19 18:02:56 UTC 2023
On Thu, 19 Oct 2023 12:54:47 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.
src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp line 3888:
> 3886: mov64(tmp3_aliased, 0xFFFFFFFFFFFFFFFF);
> 3887: shlxq(tmp3_aliased, tmp3_aliased, tmp1);
> 3888: notq(tmp3_aliased);
We can replace these two instructions with BZHI under BMI2 check.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16267#discussion_r1365864031
More information about the hotspot-compiler-dev
mailing list