Unify UNSPEC_MASKED_EQ/GT to the form of UNSPEC_PCMP.
authorliuhongt <hongtao.liu@intel.com>
Mon, 30 Aug 2021 07:05:14 +0000 (15:05 +0800)
committerliuhongt <hongtao.liu@intel.com>
Tue, 31 Aug 2021 01:25:57 +0000 (09:25 +0800)
commitf4b41701382885fc6219045bed207ec645fded2e
tree0bf22121298507b46299531dc265b37a94cb197e
parent1e2f030b80cb650708b02086dbd5431cd231495f
Unify UNSPEC_MASKED_EQ/GT to the form of UNSPEC_PCMP.

Currently for evex vpcmpeqb instruction, we have two forms of rtl
template representation, one is (unspec [op1 op2] UNSPEC_MASK_EQ), the
other is (unspec [op1, op2, const_int 0] UNSPEC_PCMP), which increases
the maintenance burden, such as optimization (not: vpcmpeqb)
to (vpcmpneqb) requires two define_insn_and_split to match the two
forms respectively, this patch removes UNSPEC_MASK_EQ/GT, unifying
them into the form of UNSPEC_PCMP.

gcc/ChangeLog:

* config/i386/sse.md (*<avx512>_ucmp<mode>3_1): Change from
define_split to define_insn_and_split.
(*avx2_eq<mode>3): Removed.
(<avx512>_eq<mode>3<mask_scalar_merge_name>): Adjust pattern
(<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Rename to ..
(*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): .. this, and
adjust pattern.
(*avx2_gt<mode>3): Removed.
(<avx512>_gt<mode>3<mask_scalar_merge_name>): Change from
define_insn to define_expand, and adjust pattern.
(UNSPEC_MASKED_EQ, UNSPEC_MASKED_GT): Removed.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512bw-vpcmpeqb-1.c: Adjust testcase.
* gcc.target/i386/avx512bw-vpcmpeqw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtb-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtw-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpeqd-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpeqq-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpgtd-1.c: Ditto.
* gcc.target/i386/avx512f-vpcmpgtq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpeqd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpeqq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtq-1.c: Ditto.
* gcc.target/i386/bitwise_mask_op-1.c: Ditto.
* gcc.target/i386/bitwise_mask_op-2.c: Ditto.
15 files changed:
gcc/config/i386/sse.md
gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqb-1.c
gcc/testsuite/gcc.target/i386/avx512bw-vpcmpeqw-1.c
gcc/testsuite/gcc.target/i386/avx512bw-vpcmpgtb-1.c
gcc/testsuite/gcc.target/i386/avx512bw-vpcmpgtw-1.c
gcc/testsuite/gcc.target/i386/avx512f-vpcmpeqd-1.c
gcc/testsuite/gcc.target/i386/avx512f-vpcmpeqq-1.c
gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtd-1.c
gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtq-1.c
gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqd-1.c
gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c
gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtd-1.c
gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c
gcc/testsuite/gcc.target/i386/bitwise_mask_op-1.c
gcc/testsuite/gcc.target/i386/bitwise_mask_op-2.c