Commit 1fc9aa54 by Jakub Jelinek Committed by Jakub Jelinek

re PR target/85832 ([AVX512] possible shorter code when comparing with vector of zeros)

	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.

	* 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.

From-SVN: r261148
parent 92a38cfd
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...
......
......@@ -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")
......
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
......
/* 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>
......
/* 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 ();
}
/* 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>
......
/* 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>
......
/* 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>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment