diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512bw-pr85832.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512bw-pr86036.c | 48 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512f-pr85832.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512vl-pr85832.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512vlbw-pr85832.c | 4 |
8 files changed, 76 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 83a7a4f..eea0298 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-06-04 Jakub Jelinek <jakub@redhat.com> + + PR target/85832 + PR target/86036 + * config/i386/sse.md (<avx512>_eq<mode>3<mask_scalar_merge_name>_1): + Use vptestnm rather than vptestm in (=Yc,v,C) variant. + 2018-06-04 Richard Biener <rguenther@suse.de> * tree-cfgcleanup.c (cleanup_tree_cfg_1): Fold into... diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 0825894..2d4e495 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -11287,7 +11287,7 @@ "TARGET_AVX512BW && !(MEM_P (operands[1]) && MEM_P (operands[2]))" "@ vpcmpeq<ssemodesuffix>\t{%2, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2} - vptestm<ssemodesuffix>\t{%1, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}" + vptestnm<ssemodesuffix>\t{%1, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}" [(set_attr "type" "ssecmp") (set_attr "prefix_extra" "1") (set_attr "prefix" "evex") @@ -11302,7 +11302,7 @@ "TARGET_AVX512F && !(MEM_P (operands[1]) && MEM_P (operands[2]))" "@ vpcmpeq<ssemodesuffix>\t{%2, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2} - vptestm<ssemodesuffix>\t{%1, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}" + vptestnm<ssemodesuffix>\t{%1, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}" [(set_attr "type" "ssecmp") (set_attr "prefix_extra" "1") (set_attr "prefix" "evex") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ec5c50..043a4f4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2018-06-04 Jakub Jelinek <jakub@redhat.com> + + PR target/85832 + PR target/86036 + * gcc.target/i386/avx512f-pr85832.c: Expect vptestnm rather than + vptestm. + * gcc.target/i386/avx512vl-pr85832.c: Likewise. + * gcc.target/i386/avx512vlbw-pr85832.c: Likewise. + * gcc.target/i386/avx512bw-pr85832.c: Likewise. + * gcc.target/i386/avx512bw-pr86036.c: New test. + 2018-06-04 Richard Biener <rguenther@suse.de> PR tree-optimization/86038 diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-pr85832.c b/gcc/testsuite/gcc.target/i386/avx512bw-pr85832.c index 40e4a2a..a406e08 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-pr85832.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-pr85832.c @@ -1,8 +1,8 @@ /* PR target/85832 */ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512bw -mno-avx512vl -masm=att" } */ -/* { dg-final { scan-assembler-times {\mvptestmb\M} 1 } } */ -/* { dg-final { scan-assembler-times {\mvptestmw\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mvptestnmb\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mvptestnmw\M} 1 } } */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-pr86036.c b/gcc/testsuite/gcc.target/i386/avx512bw-pr86036.c new file mode 100644 index 0000000..47685e5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512bw-pr86036.c @@ -0,0 +1,48 @@ +/* PR target/86036 */ +/* { dg-do run } */ +/* { dg-options "-O -mavx512bw" } */ +/* { dg-require-effective-target avx512bw } */ + +#define AVX512BW +#include "avx512f-helper.h" + +typedef unsigned short V __attribute__ ((vector_size (64))); + +__attribute__((noipa)) V +foo (V a) +{ + return a >= 3; +} + +__attribute__((noipa)) V +bar (V a) +{ + return a != 0; +} + +__attribute__((noipa)) V +baz (V a) +{ + return a == 0; +} + +void +TEST (void) +{ + V a = (V) { 3, 17, 2, 0, 9, 1, 2, 3, 0, 0, 0, 3, 3, 3, 3, 3, + 9, 16387, 9, 3, 3, 0, 0, 3, 3, 3, 0, 0, 0, 0, 3, 3 }; + V b = foo (a); + V c = (V) { -1, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, 0, 0, 0, 0, -1, -1 }; + if (__builtin_memcmp (&b, &c, sizeof (b))) + abort (); + V d = bar (a); + V e = (V) { -1, -1, -1, 0, -1, -1, -1, -1, 0, 0, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, 0, 0, 0, 0, -1, -1 }; + if (__builtin_memcmp (&d, &e, sizeof (d))) + abort (); + V f = baz (a); + V g = ~e; + if (__builtin_memcmp (&f, &g, sizeof (f))) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr85832.c b/gcc/testsuite/gcc.target/i386/avx512f-pr85832.c index 98b7140..a169776 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-pr85832.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-pr85832.c @@ -1,8 +1,8 @@ /* PR target/85832 */ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512f -mno-avx512vl -mno-avx512bw -masm=att" } */ -/* { dg-final { scan-assembler-times {\mvptestmd\M} 1 } } */ -/* { dg-final { scan-assembler-times {\mvptestmq\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mvptestnmd\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mvptestnmq\M} 1 } } */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr85832.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr85832.c index 6eb71781..09ed893 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-pr85832.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr85832.c @@ -1,8 +1,8 @@ /* PR target/85832 */ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512vl -mno-avx512bw -masm=att" } */ -/* { dg-final { scan-assembler-times {\mvptestmd\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mvptestmq\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mvptestnmd\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mvptestnmq\M} 2 } } */ #include <x86intrin.h> diff --git a/gcc/testsuite/gcc.target/i386/avx512vlbw-pr85832.c b/gcc/testsuite/gcc.target/i386/avx512vlbw-pr85832.c index 6fbdf5a..ee93e0d 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vlbw-pr85832.c +++ b/gcc/testsuite/gcc.target/i386/avx512vlbw-pr85832.c @@ -1,8 +1,8 @@ /* PR target/85832 */ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512vl -mavx512bw -masm=att" } */ -/* { dg-final { scan-assembler-times {\mvptestmb\M} 2 } } */ -/* { dg-final { scan-assembler-times {\mvptestmw\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mvptestnmb\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mvptestnmw\M} 2 } } */ #include <x86intrin.h> |