RFR: 8320347: Emulate vblendvp[sd] on ECore [v5]
Volodymyr Paprotski
duke at openjdk.org
Fri Nov 24 17:26:08 UTC 2023
On Fri, 24 Nov 2023 06:52:33 GMT, Jatin Bhateja <jbhateja at openjdk.org> wrote:
>> Volodymyr Paprotski has updated the pull request incrementally with one additional commit since the last revision:
>>
>> test break fix
>
> src/hotspot/cpu/x86/macroAssembler_x86.cpp line 3601:
>
>> 3599: if (compute_mask) {
>> 3600: vpxor(scratch, scratch, scratch, vector_len);
>> 3601: vpcmpgtq(scratch, scratch, mask, vector_len);
>
> I see assertion failures in following tests with JAVA_OPTIONS= -XX:UseAVX=1 -XX:+UnlockDiagnosticVMOptions -XX:+EnableX86ECoreOpts -Xbatch
>
> compiler/c2/cr6340864/TestDoubleVect.java
> compiler/loopopts/superword/ReductionPerf.java
> compiler/vectorization/TestSignumVector.java
> compiler/vectorization/runner/BasicDoubleOpTest.java
>
> AVX1 does not support integral vectors above 16 bytes, please use floating point compare instruction.
Hmm. Good catch!
Thinking about AVX1 case some more.. Platforms where this `vpblendvp*` emulation is needed have AVX2 at least, otherwise vpblendvp is faster. I think its better to disable this optimization entirely if AVX1 is required to be used.
I would go even further and disable `EnableX86ECoreOpts` if `UseAVX==1`. Preference?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16716#discussion_r1404552951
More information about the hotspot-dev
mailing list