Commit eee5d6f5 by Alexander Ivchenko Committed by Kirill Yukhin

AVX-512. 88/n. Add missed avx512bw/avx512vl cmp intrinsics.

gcc/
	* config/i386/avx512bwintrin.h: Add new intrinsics.
	* config/i386/avx512vlbwintrin.h: Ditto.
	* config/i386/avx512vlintrin.h: Ditto.
gcc/testsuite/
	* gcc.target/i386/avx512bw-vpcmpequb-1.c: New.
	* gcc.target/i386/avx512bw-vpcmpequb-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpequw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpequw-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgeb-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgeb-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgeub-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgeub-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgeuw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgeuw-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgew-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgew-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgtub-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgtub-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgtuw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpgtuw-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpleb-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpleb-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpleub-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpleub-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpleuw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpleuw-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmplew-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmplew-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpltb-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpltb-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpltub-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpltub-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpltuw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpltuw-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpltw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpltw-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpneqb-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpneqb-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpnequb-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpnequb-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpnequw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpnequw-2.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpneqw-1.c: Ditto.
	* gcc.target/i386/avx512bw-vpcmpneqw-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpequb-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpequd-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpequd-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpequq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpequq-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpequw-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpged-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgeq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgeud-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgeuq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgtub-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgtud-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgtud-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgtuq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgtuq-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpgtuw-2.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpled-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpleq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpleud-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpleuq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpltd-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpltq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpltud-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpltuq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpneqd-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpneqq-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpnequd-1.c: Ditto.
	* gcc.target/i386/avx512vl-vpcmpnequq-1.c: Ditto.

Co-Authored-By: Andrey Turetskiy <andrey.turetskiy@intel.com>
Co-Authored-By: Anna Tikhonova <anna.tikhonova@intel.com>
Co-Authored-By: Ilya Tocar <ilya.tocar@intel.com>
Co-Authored-By: Ilya Verbin <ilya.verbin@intel.com>
Co-Authored-By: Kirill Yukhin <kirill.yukhin@intel.com>
Co-Authored-By: Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Co-Authored-By: Michael Zolotukhin <michael.v.zolotukhin@intel.com>

From-SVN: r216819
parent 6df7579f
2014-10-29 Alexander Ivchenko <alexander.ivchenko@intel.com>
Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Anna Tikhonova <anna.tikhonova@intel.com>
Ilya Tocar <ilya.tocar@intel.com>
Andrey Turetskiy <andrey.turetskiy@intel.com>
Ilya Verbin <ilya.verbin@intel.com>
Kirill Yukhin <kirill.yukhin@intel.com>
Michael Zolotukhin <michael.v.zolotukhin@intel.com>
* config/i386/avx512bwintrin.h: Add new intrinsics.
* config/i386/avx512vlbwintrin.h: Ditto.
* config/i386/avx512vlintrin.h: Ditto.
2014-10-28 Dominik Vogt <vogt@linux.vnet.ibm.com>
* godump.c (precision_to_units): New helper function.
2014-10-20 Alexander Ivchenko <alexander.ivchenko@intel.com>
Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Anna Tikhonova <anna.tikhonova@intel.com>
Ilya Tocar <ilya.tocar@intel.com>
Andrey Turetskiy <andrey.turetskiy@intel.com>
Ilya Verbin <ilya.verbin@intel.com>
Kirill Yukhin <kirill.yukhin@intel.com>
Michael Zolotukhin <michael.v.zolotukhin@intel.com>
* gcc.target/i386/avx512bw-vpcmpequb-1.c: New.
* gcc.target/i386/avx512bw-vpcmpequb-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpequw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpequw-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgeb-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgeb-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgeub-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgeub-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgeuw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgeuw-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgew-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgew-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtub-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtub-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtuw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpgtuw-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpleb-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpleb-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpleub-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpleub-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpleuw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpleuw-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmplew-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmplew-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpltb-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpltb-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpltub-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpltub-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpltuw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpltuw-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpltw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpltw-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpneqb-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpneqb-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpnequb-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpnequb-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpnequw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpnequw-2.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpneqw-1.c: Ditto.
* gcc.target/i386/avx512bw-vpcmpneqw-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpequb-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpequd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpequd-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpequq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpequq-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpequw-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpged-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgeq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgeud-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgeuq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtub-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtud-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtud-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtuq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtuq-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpgtuw-2.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpled-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpleq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpleud-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpleuq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpltd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpltq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpltud-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpltuq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpneqd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpneqq-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpnequd-1.c: Ditto.
* gcc.target/i386/avx512vl-vpcmpnequq-1.c: Ditto.
2014-10-29 Alexander Ivchenko <alexander.ivchenko@intel.com>
Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Anna Tikhonova <anna.tikhonova@intel.com>
......
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmpeq_epu8_mask (x128, x128);
m32 = _mm256_cmpeq_epu8_mask (x256, x256);
m64 = _mm512_cmpeq_epu8_mask (x512, x512);
m16 = _mm_mask_cmpeq_epu8_mask (3, x128, x128);
m32 = _mm256_mask_cmpeq_epu8_mask (3, x256, x256);
m64 = _mm512_mask_cmpeq_epu8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned char *s1, unsigned char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] == s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
res1 = 0;
res2 = 0;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpeq_epu8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpeq_epu8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmpeq_epu16_mask (x128, x128);
m8 = _mm_mask_cmpeq_epu16_mask (3, x128, x128);
m16 = _mm256_cmpeq_epu16_mask (x256, x256);
m16 = _mm256_mask_cmpeq_epu16_mask (3, x256, x256);
m32 = _mm512_mask_cmpeq_epu16_mask (3, x512, x512);
m32 = _mm512_cmpeq_epu16_mask (x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned short *s1, unsigned short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] == s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpeq_epu16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpeq_epu16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmpge_epi8_mask (x128, x128);
m32 = _mm256_cmpge_epi8_mask (x256, x256);
m64 = _mm512_cmpge_epi8_mask (x512, x512);
m16 = _mm_mask_cmpge_epi8_mask (3, x128, x128);
m32 = _mm256_mask_cmpge_epi8_mask (3, x256, x256);
m64 = _mm512_mask_cmpge_epi8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, char *s1, char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] >= s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpge_epi8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpge_epi8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmpge_epu8_mask (x128, x128);
m32 = _mm256_cmpge_epu8_mask (x256, x256);
m64 = _mm512_cmpge_epu8_mask (x512, x512);
m16 = _mm_mask_cmpge_epu8_mask (3, x128, x128);
m32 = _mm256_mask_cmpge_epu8_mask (3, x256, x256);
m64 = _mm512_mask_cmpge_epu8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned char *s1, unsigned char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] >= s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpge_epu8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpge_epu8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmpge_epu16_mask (x128, x128);
m16 = _mm256_cmpge_epu16_mask (x256, x256);
m32 = _mm512_cmpge_epu16_mask (x512, x512);
m8 = _mm_mask_cmpge_epu16_mask (3, x128, x128);
m16 = _mm256_mask_cmpge_epu16_mask (3, x256, x256);
m32 = _mm512_mask_cmpge_epu16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned short *s1, unsigned short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] >= s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpge_epu16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpge_epu16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmpge_epi16_mask (x128, x128);
m16 = _mm256_cmpge_epi16_mask (x256, x256);
m32 = _mm512_cmpge_epi16_mask (x512, x512);
m8 = _mm_mask_cmpge_epi16_mask (3, x128, x128);
m16 = _mm256_mask_cmpge_epi16_mask (3, x256, x256);
m32 = _mm512_mask_cmpge_epi16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, short *s1, short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] >= s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpge_epi16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpge_epi16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmpgt_epu8_mask (x128, x128);
m32 = _mm256_cmpgt_epu8_mask (x256, x256);
m64 = _mm512_cmpgt_epu8_mask (x512, x512);
m16 = _mm_mask_cmpgt_epu8_mask (3, x128, x128);
m32 = _mm256_mask_cmpgt_epu8_mask (3, x256, x256);
m64 = _mm512_mask_cmpgt_epu8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned char *s1, unsigned char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] > s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpgt_epu8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpgt_epu8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmpgt_epu16_mask (x128, x128);
m16 = _mm256_cmpgt_epu16_mask (x256, x256);
m32 = _mm512_cmpgt_epu16_mask (x512, x512);
m8 = _mm_mask_cmpgt_epu16_mask (3, x128, x128);
m16 = _mm256_mask_cmpgt_epu16_mask (3, x256, x256);
m32 = _mm512_mask_cmpgt_epu16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned short *s1, unsigned short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] > s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpgt_epu16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpgt_epu16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmple_epi8_mask (x128, x128);
m32 = _mm256_cmple_epi8_mask (x256, x256);
m64 = _mm512_cmple_epi8_mask (x512, x512);
m16 = _mm_mask_cmple_epi8_mask (3, x128, x128);
m32 = _mm256_mask_cmple_epi8_mask (3, x256, x256);
m64 = _mm512_mask_cmple_epi8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, char *s1, char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] <= s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmple_epi8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmple_epi8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmple_epu8_mask (x128, x128);
m32 = _mm256_cmple_epu8_mask (x256, x256);
m64 = _mm512_cmple_epu8_mask (x512, x512);
m16 = _mm_mask_cmple_epu8_mask (3, x128, x128);
m32 = _mm256_mask_cmple_epu8_mask (3, x256, x256);
m64 = _mm512_mask_cmple_epu8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned char *s1, unsigned char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] <= s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmple_epu8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmple_epu8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmple_epu16_mask (x128, x128);
m16 = _mm256_cmple_epu16_mask (x256, x256);
m32 = _mm512_cmple_epu16_mask (x512, x512);
m8 = _mm_mask_cmple_epu16_mask (3, x128, x128);
m16 = _mm256_mask_cmple_epu16_mask (3, x256, x256);
m32 = _mm512_mask_cmple_epu16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned short *s1, unsigned short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] <= s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmple_epu16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmple_epu16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmple_epi16_mask (x128, x128);
m16 = _mm256_cmple_epi16_mask (x256, x256);
m32 = _mm512_cmple_epi16_mask (x512, x512);
m8 = _mm_mask_cmple_epi16_mask (3, x128, x128);
m16 = _mm256_mask_cmple_epi16_mask (3, x256, x256);
m32 = _mm512_mask_cmple_epi16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, short *s1, short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] <= s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmple_epi16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmple_epi16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmplt_epi8_mask (x128, x128);
m32 = _mm256_cmplt_epi8_mask (x256, x256);
m64 = _mm512_cmplt_epi8_mask (x512, x512);
m16 = _mm_mask_cmplt_epi8_mask (3, x128, x128);
m32 = _mm256_mask_cmplt_epi8_mask (3, x256, x256);
m64 = _mm512_mask_cmplt_epi8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, char *s1, char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] < s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmplt_epi8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmplt_epi8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmplt_epu8_mask (x128, x128);
m32 = _mm256_cmplt_epu8_mask (x256, x256);
m64 = _mm512_cmplt_epu8_mask (x512, x512);
m16 = _mm_mask_cmplt_epu8_mask (3, x128, x128);
m32 = _mm256_mask_cmplt_epu8_mask (3, x256, x256);
m64 = _mm512_mask_cmplt_epu8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned char *s1, unsigned char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] < s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmplt_epu8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmplt_epu8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmplt_epu16_mask (x128, x128);
m16 = _mm256_cmplt_epu16_mask (x256, x256);
m32 = _mm512_cmplt_epu16_mask (x512, x512);
m8 = _mm_mask_cmplt_epu16_mask (3, x128, x128);
m16 = _mm256_mask_cmplt_epu16_mask (3, x256, x256);
m32 = _mm512_mask_cmplt_epu16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned short *s1, unsigned short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] < s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmplt_epu16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmplt_epu16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmplt_epi16_mask (x128, x128);
m16 = _mm256_cmplt_epi16_mask (x256, x256);
m32 = _mm512_cmplt_epi16_mask (x512, x512);
m8 = _mm_mask_cmplt_epi16_mask (3, x128, x128);
m16 = _mm256_mask_cmplt_epi16_mask (3, x256, x256);
m32 = _mm512_mask_cmplt_epi16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, short *s1, short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] < s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmplt_epi16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmplt_epi16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpb\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmpneq_epi8_mask (x128, x128);
m32 = _mm256_cmpneq_epi8_mask (x256, x256);
m64 = _mm512_cmpneq_epi8_mask (x512, x512);
m16 = _mm_mask_cmpneq_epi8_mask (3, x128, x128);
m32 = _mm256_mask_cmpneq_epi8_mask (3, x256, x256);
m64 = _mm512_mask_cmpneq_epi8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, char *s1, char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] != s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpneq_epi8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpneq_epi8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpub\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask16 m16;
volatile __mmask32 m32;
volatile __mmask64 m64;
void extern
avx512bw_test (void)
{
m16 = _mm_cmpneq_epu8_mask (x128, x128);
m32 = _mm256_cmpneq_epu8_mask (x256, x256);
m64 = _mm512_cmpneq_epu8_mask (x512, x512);
m16 = _mm_mask_cmpneq_epu8_mask (3, x128, x128);
m32 = _mm256_mask_cmpneq_epu8_mask (3, x256, x256);
m64 = _mm512_mask_cmpneq_epu8_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 8)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned char *s1, unsigned char *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] != s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_b) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpneq_epu8_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpneq_epu8_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmpneq_epu16_mask (x128, x128);
m16 = _mm256_cmpneq_epu16_mask (x256, x256);
m32 = _mm512_cmpneq_epu16_mask (x512, x512);
m8 = _mm_mask_cmpneq_epu16_mask (3, x128, x128);
m16 = _mm256_mask_cmpneq_epu16_mask (3, x256, x256);
m32 = _mm512_mask_cmpneq_epu16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, unsigned short *s1, unsigned short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] != s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpneq_epu16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpneq_epu16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do compile } */
/* { dg-options "-mavx512bw -mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpw\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m512i x512;
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m8;
volatile __mmask16 m16;
volatile __mmask32 m32;
void extern
avx512bw_test (void)
{
m8 = _mm_cmpneq_epi16_mask (x128, x128);
m16 = _mm256_cmpneq_epi16_mask (x256, x256);
m32 = _mm512_cmpneq_epi16_mask (x512, x512);
m8 = _mm_mask_cmpneq_epi16_mask (3, x128, x128);
m16 = _mm256_mask_cmpneq_epi16_mask (3, x256, x256);
m32 = _mm512_mask_cmpneq_epi16_mask (3, x512, x512);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -DAVX512BW" } */
/* { dg-require-effective-target avx512bw } */
#include "avx512f-helper.h"
#define SIZE (AVX512F_LEN / 16)
#include "avx512f-mask-type.h"
void
CALC (MASK_TYPE *r, short *s1, short *s2)
{
int i;
*r = 0;
MASK_TYPE one = 1;
for (i = 0; i < SIZE; i++)
if (s1[i] != s2[i])
*r = *r | (one << i);
}
void
TEST (void)
{
int i;
UNION_TYPE (AVX512F_LEN, i_w) src1, src2;
MASK_TYPE res_ref, res1, res2;
MASK_TYPE mask = MASK_VALUE;
for (i = 0; i < SIZE / 2; i++)
{
src1.a[i * 2] = i;
src1.a[i * 2 + 1] = i * i;
src2.a[i * 2] = 2 * i;
src2.a[i * 2 + 1] = i * i;
}
res1 = INTRINSIC (_cmpneq_epi16_mask) (src1.x, src2.x);
res2 = INTRINSIC (_mask_cmpneq_epi16_mask) (mask, src1.x, src2.x);
CALC (&res_ref, src1.a, src2.a);
if (res_ref != res1)
abort ();
res_ref &= mask;
if (res_ref != res2)
abort ();
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -mavx512vl -DAVX512VL" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512F_LEN 256
#define AVX512F_LEN_HALF 128
#include "avx512bw-vpcmpequb-2.c"
#undef AVX512F_LEN
#undef AVX512F_LEN_HALF
#define AVX512F_LEN 128
#define AVX512F_LEN_HALF 128
#include "avx512bw-vpcmpequb-2.c"
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler-times "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" 1 } } */
/* { dg-final { scan-assembler-times "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" 1 } } */
/* { dg-final { scan-assembler-times "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n^k\]*%k\[1-7\]\[^\{\]" 1 } } */
/* { dg-final { scan-assembler-times "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n^k\]*%k\[1-7\]\[^\{\]" 1 } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpeq_epu32_mask (x128, x128);
m = _mm256_cmpeq_epu32_mask (x256, x256);
m = _mm_mask_cmpeq_epu32_mask (3, x128, x128);
m = _mm256_mask_cmpeq_epu32_mask (3, x256, x256);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512vl -DAVX512VL" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512F_LEN 256
#define AVX512F_LEN_HALF 128
#include "avx512f-vpcmpequd-2.c"
#undef AVX512F_LEN
#undef AVX512F_LEN_HALF
#define AVX512F_LEN 128
#define AVX512F_LEN_HALF 128
#include "avx512f-vpcmpequd-2.c"
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpeq_epu64_mask (x128, x128);
m = _mm256_cmpeq_epu64_mask (x256, x256);
m = _mm_mask_cmpeq_epu64_mask (3, x128, x128);
m = _mm256_mask_cmpeq_epu64_mask (3, x256, x256);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512vl -DAVX512VL" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512F_LEN 256
#define AVX512F_LEN_HALF 128
#include "avx512f-vpcmpequq-2.c"
#undef AVX512F_LEN
#undef AVX512F_LEN_HALF
#define AVX512F_LEN 128
#define AVX512F_LEN_HALF 128
#include "avx512f-vpcmpequq-2.c"
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -mavx512vl -DAVX512VL" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512F_LEN 256
#define AVX512F_LEN_HALF 128
#include "avx512bw-vpcmpequw-2.c"
#undef AVX512F_LEN
#undef AVX512F_LEN_HALF
#define AVX512F_LEN 128
#define AVX512F_LEN_HALF 128
#include "avx512bw-vpcmpequw-2.c"
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpge_epi32_mask (x128, x128);
m = _mm256_cmpge_epi32_mask (x256, x256);
m = _mm_mask_cmpge_epi32_mask (3, x128, x128);
m = _mm256_mask_cmpge_epi32_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpge_epi64_mask (x128, x128);
m = _mm256_cmpge_epi64_mask (x256, x256);
m = _mm_mask_cmpge_epi64_mask (3, x128, x128);
m = _mm256_mask_cmpge_epi64_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpge_epu32_mask (x128, x128);
m = _mm256_cmpge_epu32_mask (x256, x256);
m = _mm_mask_cmpge_epu32_mask (3, x128, x128);
m = _mm256_mask_cmpge_epu32_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpge_epu64_mask (x128, x128);
m = _mm256_cmpge_epu64_mask (x256, x256);
m = _mm_mask_cmpge_epu64_mask (3, x128, x128);
m = _mm256_mask_cmpge_epu64_mask (3, x256, x256);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -mavx512vl -DAVX512VL" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512F_LEN 256
#define AVX512F_LEN_HALF 128
#include "avx512bw-vpcmpgtub-2.c"
#undef AVX512F_LEN
#undef AVX512F_LEN_HALF
#define AVX512F_LEN 128
#define AVX512F_LEN_HALF 128
#include "avx512bw-vpcmpgtub-2.c"
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpgt_epu32_mask (x128, x128);
m = _mm256_cmpgt_epu32_mask (x256, x256);
m = _mm_mask_cmpgt_epu32_mask (3, x128, x128);
m = _mm256_mask_cmpgt_epu32_mask (3, x256, x256);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512vl -DAVX512VL" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512F_LEN 256
#define AVX512F_LEN_HALF 128
#include "avx512f-vpcmpgtud-2.c"
#undef AVX512F_LEN
#undef AVX512F_LEN_HALF
#define AVX512F_LEN 128
#define AVX512F_LEN_HALF 128
#include "avx512f-vpcmpgtud-2.c"
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpgt_epu64_mask (x128, x128);
m = _mm256_cmpgt_epu64_mask (x256, x256);
m = _mm_mask_cmpgt_epu64_mask (3, x128, x128);
m = _mm256_mask_cmpgt_epu64_mask (3, x256, x256);
}
/* { dg-do run } */
/* { dg-options "-O2 -mavx512vl -DAVX512VL" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512F_LEN 256
#define AVX512F_LEN_HALF 128
#include "avx512f-vpcmpgtuq-2.c"
#undef AVX512F_LEN
#undef AVX512F_LEN_HALF
#define AVX512F_LEN 128
#define AVX512F_LEN_HALF 128
#include "avx512f-vpcmpgtuq-2.c"
/* { dg-do run } */
/* { dg-options "-O2 -mavx512bw -mavx512vl -DAVX512VL" } */
/* { dg-require-effective-target avx512vl } */
#define AVX512F_LEN 256
#define AVX512F_LEN_HALF 128
#include "avx512bw-vpcmpgtuw-2.c"
#undef AVX512F_LEN
#undef AVX512F_LEN_HALF
#define AVX512F_LEN 128
#define AVX512F_LEN_HALF 128
#include "avx512bw-vpcmpgtuw-2.c"
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmple_epi32_mask (x128, x128);
m = _mm256_cmple_epi32_mask (x256, x256);
m = _mm_mask_cmple_epi32_mask (3, x128, x128);
m = _mm256_mask_cmple_epi32_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmple_epi64_mask (x128, x128);
m = _mm256_cmple_epi64_mask (x256, x256);
m = _mm_mask_cmple_epi64_mask (3, x128, x128);
m = _mm256_mask_cmple_epi64_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmple_epu32_mask (x128, x128);
m = _mm256_cmple_epu32_mask (x256, x256);
m = _mm_mask_cmple_epu32_mask (3, x128, x128);
m = _mm256_mask_cmple_epu32_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmple_epu64_mask (x128, x128);
m = _mm256_cmple_epu64_mask (x256, x256);
m = _mm_mask_cmple_epu64_mask (3, x128, x128);
m = _mm256_mask_cmple_epu64_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmplt_epi32_mask (x128, x128);
m = _mm256_cmplt_epi32_mask (x256, x256);
m = _mm_mask_cmplt_epi32_mask (3, x128, x128);
m = _mm256_mask_cmplt_epi32_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmplt_epi64_mask (x128, x128);
m = _mm256_cmplt_epi64_mask (x256, x256);
m = _mm_mask_cmplt_epi64_mask (3, x128, x128);
m = _mm256_mask_cmplt_epi64_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmplt_epu32_mask (x128, x128);
m = _mm256_cmplt_epu32_mask (x256, x256);
m = _mm_mask_cmplt_epu32_mask (3, x128, x128);
m = _mm256_mask_cmplt_epu32_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmplt_epu64_mask (x128, x128);
m = _mm256_cmplt_epu64_mask (x256, x256);
m = _mm_mask_cmplt_epu64_mask (3, x128, x128);
m = _mm256_mask_cmplt_epu64_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpd\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpneq_epi32_mask (x128, x128);
m = _mm256_cmpneq_epi32_mask (x256, x256);
m = _mm_mask_cmpneq_epi32_mask (3, x128, x128);
m = _mm256_mask_cmpneq_epi32_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpneq_epi64_mask (x128, x128);
m = _mm256_cmpneq_epi64_mask (x256, x256);
m = _mm_mask_cmpneq_epi64_mask (3, x128, x128);
m = _mm256_mask_cmpneq_epi64_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpud\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpneq_epu32_mask (x128, x128);
m = _mm256_cmpneq_epu32_mask (x256, x256);
m = _mm_mask_cmpneq_epu32_mask (3, x128, x128);
m = _mm256_mask_cmpneq_epu32_mask (3, x256, x256);
}
/* { dg-do compile } */
/* { dg-options "-mavx512vl -O2" } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\[^\{\]" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%ymm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
/* { dg-final { scan-assembler "vpcmpuq\[ \\t\]+\[^\n\]*%xmm\[0-9\]\[^\n\]*%k\[1-7\]\{%k\[1-7\]\}" } } */
#include <immintrin.h>
volatile __m256i x256;
volatile __m128i x128;
volatile __mmask8 m;
void extern
avx512vl_test (void)
{
m = _mm_cmpneq_epu64_mask (x128, x128);
m = _mm256_cmpneq_epu64_mask (x256, x256);
m = _mm_mask_cmpneq_epu64_mask (3, x128, x128);
m = _mm256_mask_cmpneq_epu64_mask (3, x256, x256);
}
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