diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-11-07 21:49:30 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-11-07 21:49:30 +0100 |
commit | acd377795f259233d3b9c5cd81a9156c1c3081f9 (patch) | |
tree | f219652a00e5777106e1307e49822984260feb6a /gcc | |
parent | 682d3a407696ddde5f4404e7e165b0e165bd4187 (diff) | |
download | gcc-acd377795f259233d3b9c5cd81a9156c1c3081f9.zip gcc-acd377795f259233d3b9c5cd81a9156c1c3081f9.tar.gz gcc-acd377795f259233d3b9c5cd81a9156c1c3081f9.tar.bz2 |
re PR target/82855 (AVX512: replace OP+movemask with OP_mask+ktest)
PR target/82855
* config/i386/i386.md (SWI1248_AVX512BWDQ2_64): New mode iterator.
(*cmp<mode>_ccz_1): New insn with $k alternative.
* gcc.target/i386/avx512dq-pr82855.c: New test.
From-SVN: r254510
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 20 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512dq-pr82855.c | 14 |
4 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e387ee2..8b9e91a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,10 @@ 2017-11-07 Jakub Jelinek <jakub@redhat.com> PR target/82855 + * config/i386/i386.md (SWI1248_AVX512BWDQ2_64): New mode iterator. + (*cmp<mode>_ccz_1): New insn with $k alternative. + + PR target/82855 * config/i386/i386.c (ix86_swap_binary_operands_p): Treat RTX_COMM_COMPARE as commutative as well. (ix86_binary_operator_ok): Formatting fix. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 36061e1..90e622c 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1275,6 +1275,26 @@ (compare:CC (match_operand:SWI48 0 "nonimmediate_operand") (match_operand:SWI48 1 "<general_operand>")))]) +(define_mode_iterator SWI1248_AVX512BWDQ2_64 + [(QI "TARGET_AVX512DQ") (HI "TARGET_AVX512DQ") + (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW && TARGET_64BIT")]) + +(define_insn "*cmp<mode>_ccz_1" + [(set (reg FLAGS_REG) + (compare (match_operand:SWI1248_AVX512BWDQ2_64 0 + "nonimmediate_operand" "<r>,?m<r>,$k") + (match_operand:SWI1248_AVX512BWDQ2_64 1 "const0_operand")))] + "ix86_match_ccmode (insn, CCZmode)" + "@ + test{<imodesuffix>}\t%0, %0 + cmp{<imodesuffix>}\t{%1, %0|%0, %1} + ktest<mskmodesuffix>\t%0, %0" + [(set_attr "type" "test,icmp,msklog") + (set_attr "length_immediate" "0,1,*") + (set_attr "modrm_class" "op0,unknown,*") + (set_attr "prefix" "*,*,vex") + (set_attr "mode" "<MODE>")]) + (define_insn "*cmp<mode>_ccno_1" [(set (reg FLAGS_REG) (compare (match_operand:SWI 0 "nonimmediate_operand" "<r>,?m<r>") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d8a0188..ee526bf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-11-07 Jakub Jelinek <jakub@redhat.com> + + PR target/82855 + * gcc.target/i386/avx512dq-pr82855.c: New test. + 2017-11-07 Uros Bizjak <ubizjak@gmail.com> PR target/80425 diff --git a/gcc/testsuite/gcc.target/i386/avx512dq-pr82855.c b/gcc/testsuite/gcc.target/i386/avx512dq-pr82855.c new file mode 100644 index 0000000..563454c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512dq-pr82855.c @@ -0,0 +1,14 @@ +/* PR target/82855 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512vl -mavx512dq" } */ +/* { dg-final { scan-assembler {\mktestb\M} } } */ + +#include <immintrin.h> + +int +foo (const __m256i *ptr) +{ + __m256i v = _mm256_loadu_si256 (ptr); + __mmask8 m = _mm256_cmpeq_epi32_mask (v, _mm256_setzero_si256 ()); + return 0 == m; +} |