1/* { dg-do run } */
2/* { dg-options "-O2 -ftree-vectorize -ffast-math -mavx512bw -save-temps" } */
3/* { dg-require-effective-target avx512bw } */
4
5#include "avx512bw-check.h"
6
7#define N 400
8
9typedef struct
10{
11  unsigned char real;
12  unsigned char imag;
13} complex8_t;
14
15void
16__attribute__ ((noinline)) foo (unsigned char *a,
17				complex8_t *x, unsigned len)
18{
19  unsigned i;
20  for (i = 0; i < len; i++)
21    a[i] = x[i].imag + x[i].real;
22}
23
24void
25avx512bw_test ()
26{
27  unsigned short i;
28  unsigned char j = 0;
29  complex8_t x [N];
30  unsigned char a [N];
31
32  for (i = 0; i < N; i++, j++)
33    {
34      x [i].real = j;
35      x [i].imag = j;
36    }
37
38  foo (a, x, N);
39
40  j = 0;
41  for (i = 0; i < N; i++, j++)
42    if ( a[i] != (unsigned char)(j+j) )
43      abort ();
44}
45
46/* { dg-final { scan-assembler-times "vpmovwb\[ \\t\]+\[^\n\]*%zmm" 4 } } */
47