Integrated: 8255438: [Vector API] More instructs in x86.ad should use legacy mode for code-gen
Jie Fu
jiefu at openjdk.java.net
Wed Oct 28 23:06:49 UTC 2020
On Tue, 27 Oct 2020 07:34:57 GMT, Jie Fu <jiefu at openjdk.org> wrote:
> Hi all,
>
> Just as @jatin-bhateja pointed out [1], there are more instructs in x86.ad which should use legacy mode.
>
> It would be better to fix the following cases:
> ------------------------
> 1. instruct mul2L_reg
> The code-gen logic uses phaddd [2], which requires legacy mode here [3].
> This bug might be reproduced on AVX512 machines without avx512dq.
>
> 2. instruct vmul4L_reg_avx
> The code-gen logic uses vphaddd [4], which requires legacy mode here [5].
> This bug might be reproduced on AVX512 machines without avx512dq.
>
> 3. instruct reductionL
> For MulReductionVL, the code-gen chain can be: reduceL --> reduce4L --> reduce_operation_128 --> vpmullq [6]
> vpmullq require legacy mode [7] if avx512dq isn't supported.
> This bug might be reproduced on AVX512 machines without avx512dq.
>
> 4. instruct reductionB
> For MinReductionV, the code-gen chain can be: reduceB --> reduce32B --> reduce_operation_128 --> pminsb [8]
> pminsb require legacy mode [9] if avx512bw isn't supported.
> This bug might be reproduced on AVX512 machines without avx512bw.
> ------------------------
> Bugs in mul2L_reg/vmul4L_reg_avx/reductionL can be only reproduced on AVX512 machines without avx512dq.
> And bug in reductionB can be only reproduced on AVX512 machines without avx512bw.
>
> Unfortunately, it's impossible for us to create reproducers since our AVX512 platforms support both avx512dq and avx512bw.
> However, it do make sense to fix these unexposed bugs since vector api code will be sure to run on various paltforms (e.g., AVX512 machines without avx512dq/bw) in the future.
>
> The fix just changes vec to legVec, which is quite safe in theory.
>
> As for the reduction patterns of Float and Double, I don't see any reason that they should use legacy mode (maybe I've missed something).
>
> Testing:
> - jdk/incubator/vector on both AVX512 and AVX256 machines
>
> Any comments?
>
> Thanks a lot.
> Best regards,
> Jie
>
> [1] https://github.com/openjdk/jdk/pull/791#commitcomment-43473733
> [2] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/x86.ad#L5472
> [3] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/assembler_x86.cpp#L6217
> [4] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/x86.ad#L5497
> [5] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/assembler_x86.cpp#L6165
> [6] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp#L1521
> [7] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/assembler_x86.cpp#L6428
> [8] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp#L1482
> [9] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/assembler_x86.cpp#L6475
This pull request has now been integrated.
Changeset: d82a6dcf
Author: Jie Fu <jiefu at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/d82a6dcf
Stats: 14 lines in 1 file changed: 0 ins; 4 del; 10 mod
8255438: [Vector API] More instructs in x86.ad should use legacy mode for code-gen
Reviewed-by: kvn, vlivanov, azeemj
-------------
PR: https://git.openjdk.java.net/jdk/pull/874
More information about the hotspot-compiler-dev
mailing list