aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-11-07 21:49:30 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-11-07 21:49:30 +0100
commitacd377795f259233d3b9c5cd81a9156c1c3081f9 (patch)
treef219652a00e5777106e1307e49822984260feb6a
parent682d3a407696ddde5f4404e7e165b0e165bd4187 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/i386.md20
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512dq-pr82855.c14
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;
+}