1  /* { dg-do run } */
       2  /* { dg-options "-O2 -mavx -ftree-vectorize -fvect-cost-model=unlimited -mprefer-vector-width=256" } */
       3  /* { dg-require-effective-target avx } */
       4  
       5  #include "avx-check.h"
       6  #include <string.h>
       7  #include "pr106010-5a.c"
       8  
       9  void
      10  avx_test (void)
      11  {
      12    _Complex double* pd_src = (_Complex double*) malloc (64);
      13    _Complex double* pd_dst = (_Complex double*) malloc (64);
      14    _Complex double* pd_exp = (_Complex double*) malloc (64);
      15    _Complex float* ps_src = (_Complex float*) malloc (64);
      16    _Complex float* ps_dst = (_Complex float*) malloc (64);
      17    _Complex float* ps_exp = (_Complex float*) malloc (64);
      18    _Complex long long* epi64_src = (_Complex long long*) malloc (64);
      19    _Complex long long* epi64_dst = (_Complex long long*) malloc (64);
      20    _Complex long long* epi64_exp = (_Complex long long*) malloc (64);
      21    _Complex int* epi32_src = (_Complex int*) malloc (64);
      22    _Complex int* epi32_dst = (_Complex int*) malloc (64);
      23    _Complex int* epi32_exp = (_Complex int*) malloc (64);
      24    _Complex short* epi16_src = (_Complex short*) malloc (64);
      25    _Complex short* epi16_dst = (_Complex short*) malloc (64);
      26    _Complex short* epi16_exp = (_Complex short*) malloc (64);
      27    _Complex char* epi8_src = (_Complex char*) malloc (64);
      28    _Complex char* epi8_dst = (_Complex char*) malloc (64);
      29    _Complex char* epi8_exp = (_Complex char*) malloc (64);
      30    char* p = (char* ) malloc (64);
      31    char* q = (char* ) malloc (64);
      32  
      33    __builtin_memset (pd_dst, 0, 64);
      34    __builtin_memset (ps_dst, 0, 64);
      35    __builtin_memset (epi64_dst, 0, 64);
      36    __builtin_memset (epi32_dst, 0, 64);
      37    __builtin_memset (epi16_dst, 0, 64);
      38    __builtin_memset (epi8_dst, 0, 64);
      39  
      40    for (int i = 0; i != 64; i++)
      41      {
      42        p[i] = i;
      43        q[i] = (i + 32) % 64;
      44      }
      45    __builtin_memcpy (pd_src, p, 64);
      46    __builtin_memcpy (ps_src, p, 64);
      47    __builtin_memcpy (epi64_src, p, 64);
      48    __builtin_memcpy (epi32_src, p, 64);
      49    __builtin_memcpy (epi16_src, p, 64);
      50    __builtin_memcpy (epi8_src, p, 64);
      51  
      52    __builtin_memcpy (pd_exp, q, 64);
      53    __builtin_memcpy (ps_exp, q, 64);
      54    __builtin_memcpy (epi64_exp, q, 64);
      55    __builtin_memcpy (epi32_exp, q, 64);
      56    __builtin_memcpy (epi16_exp, q, 64);
      57    __builtin_memcpy (epi8_exp, q, 64);
      58  
      59    foo_pd (pd_dst, pd_src);
      60    foo_ps (ps_dst, ps_src);
      61    foo_epi64 (epi64_dst, epi64_src);
      62    foo_epi32 (epi32_dst, epi32_src);
      63    foo_epi16 (epi16_dst, epi16_src);
      64    foo_epi8 (epi8_dst, epi8_src);
      65  
      66    if (__builtin_memcmp (pd_dst, pd_exp, 64) != 0)
      67      __builtin_abort ();
      68    if (__builtin_memcmp (ps_dst, ps_exp, 64) != 0)
      69      __builtin_abort ();
      70    if (__builtin_memcmp (epi64_dst, epi64_exp, 64) != 0)
      71      __builtin_abort ();
      72    if (__builtin_memcmp (epi32_dst, epi32_exp, 64) != 0)
      73      __builtin_abort ();
      74    if (__builtin_memcmp (epi16_dst, epi16_exp, 64) != 0)
      75      __builtin_abort ();
      76    if (__builtin_memcmp (epi8_dst, epi8_exp, 64) != 0)
      77      __builtin_abort ();
      78  
      79    return;
      80  }