AVX512FP16: Support basic 64/32bit vector type and operation.
authorHongyu Wang <hongyu.wang@intel.com>
Thu, 15 Jul 2021 05:31:24 +0000 (13:31 +0800)
committerHongyu Wang <hongyu.wang@intel.com>
Tue, 28 Sep 2021 08:39:32 +0000 (16:39 +0800)
commiteea10afef71e1947e3a3fde2a44839054ab91967
treeafd7e449fa6e097abacd0c9303df0cab63e61eef
parent1dadd5110f8b9ac65c53207c9bda612c3309f96b
AVX512FP16: Support basic 64/32bit vector type and operation.

For 32bit target, V4HF vector is parsed same as __m64 type, V2HF
is parsed by stack and returned from GPR since it is not specified
by ABI.

gcc/ChangeLog:

PR target/102230
* config/i386/i386.h (VALID_AVX512FP16_REG_MODE): Add
V2HF mode check.
(VALID_SSE2_REG_VHF_MODE): Add V4HFmode and V2HFmode.
(VALID_MMX_REG_MODE): Add V4HFmode.
(SSE_REG_MODE_P): Replace VALID_AVX512FP16_REG_MODE with
vector mode condition.
* config/i386/i386.c (classify_argument): Parse V4HF/V2HF
via sse regs.
(function_arg_32): Add V4HFmode.
(function_arg_advance_32): Likewise.
* config/i386/i386.md (mode): Add V4HF/V2HF.
(MODE_SIZE): Likewise.
* config/i386/mmx.md (MMXMODE): Add V4HF mode.
(V_32): Add V2HF mode.
(VHF_32_64): New mode iterator.
(*mov<mode>_internal): Adjust sse alternatives to support
V4HF mode move.
(*mov<mode>_internal): Adjust sse alternatives to support
V2HF mode move.
(<insn><mode>3): New define_insn for add/sub/mul/div.

gcc/testsuite/ChangeLog:

PR target/102230
* gcc.target/i386/avx512fp16-floatvnhf.c: Remove xfail.
* gcc.target/i386/avx512fp16-trunc-extendvnhf.c: Ditto.
* gcc.target/i386/avx512fp16-truncvnhf.c: Ditto.
* gcc.target/i386/avx512fp16-64-32-vecop-1.c: New test.
* gcc.target/i386/avx512fp16-64-32-vecop-2.c: Ditto.
* gcc.target/i386/pr102230.c: Ditto.
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/i386.md
gcc/config/i386/mmx.md
gcc/testsuite/gcc.target/i386/avx512fp16-64-32-vecop-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx512fp16-64-32-vecop-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx512fp16-floatvnhf.c
gcc/testsuite/gcc.target/i386/avx512fp16-trunc-extendvnhf.c
gcc/testsuite/gcc.target/i386/avx512fp16-truncvnhf.c
gcc/testsuite/gcc.target/i386/pr102230.c [new file with mode: 0644]