1  /* { dg-do run } */
       2  /* { dg-options "-O3 -mavx2 -fvect-cost-model=unlimited" } */
       3  /* { dg-require-effective-target avx2 } */
       4  
       5  #include <string.h>
       6  #include "avx2-check.h"
       7  #include "pr106010-9a.c"
       8  
       9  static void
      10  avx2_test (void)
      11  {
      12    _Complex double* pd_src = (_Complex double*) malloc (N * sizeof (_Complex double));
      13    _Complex double* pd_dst = (_Complex double*) malloc (N * sizeof (_Complex double));
      14    _Complex double* pd_src2 = (_Complex double*) malloc (N * sizeof (_Complex double));
      15    _Complex double* pd_dst2 = (_Complex double*) malloc (N * sizeof (_Complex double));
      16    cdf* cdf_src = (cdf*) malloc (N * sizeof (cdf));
      17    cdf* cdf_dst = (cdf*) malloc (N * sizeof (cdf));
      18    cdf2* cdf2_src = (cdf2*) malloc (N * sizeof (cdf2));
      19    cdf2* cdf2_dst = (cdf2*) malloc (N * sizeof (cdf2));
      20    cdf3* cdf3_src = (cdf3*) malloc (N * sizeof (cdf3));
      21    cdf3* cdf3_dst = (cdf3*) malloc (N * sizeof (cdf3));
      22    cdf4* cdf4_src = (cdf4*) malloc (N * sizeof (cdf4));
      23    cdf4* cdf4_dst = (cdf4*) malloc (N * sizeof (cdf4));
      24    
      25    char* p_init = (char*) malloc (N * sizeof (cdf3));
      26  
      27    __builtin_memset (cdf_dst, 0, N * sizeof (cdf));
      28    __builtin_memset (cdf2_dst, 0, N * sizeof (cdf2));
      29    __builtin_memset (cdf3_dst, 0, N * sizeof (cdf3));
      30    __builtin_memset (cdf4_dst, 0, N * sizeof (cdf4));
      31    __builtin_memset (pd_dst, 0, N * sizeof (_Complex double));
      32    __builtin_memset (pd_dst2, 0, N * sizeof (_Complex double));
      33  
      34    for (int i = 0; i != N * sizeof (cdf3); i++)
      35      p_init[i] = i;
      36  
      37    memcpy (cdf_src, p_init, N * sizeof (cdf));
      38    memcpy (cdf2_src, p_init, N * sizeof (cdf2));
      39    memcpy (cdf3_src, p_init, N * sizeof (cdf3));
      40    memcpy (cdf4_src, p_init, N * sizeof (cdf4));
      41    memcpy (pd_src, p_init, N * sizeof (_Complex double));
      42    for (int i = 0; i != 2 * N * sizeof (double); i++)
      43      p_init[i] = i % 16;
      44    memcpy (pd_src2, p_init, N * sizeof (_Complex double));
      45  
      46    foo (cdf_dst, cdf_src);
      47    foo1 (cdf2_dst, cdf2_src);
      48    foo2 (cdf3_dst, cdf3_src);
      49    foo3 (cdf4_dst, cdf4_src);
      50    foo4 (pd_dst, pd_src);
      51    foo5 (pd_dst2, pd_src2);
      52    for (int i = 0; i != N; i++)
      53      {
      54        p_init[(N - i - 1) * 16] = i * 16;
      55        p_init[(N - i - 1) * 16 + 1] = i * 16 + 1;
      56        p_init[(N - i - 1) * 16 + 2] = i * 16 + 2;
      57        p_init[(N - i - 1) * 16 + 3] = i * 16 + 3;
      58        p_init[(N - i - 1) * 16 + 4] = i * 16 + 4;
      59        p_init[(N - i - 1) * 16 + 5] = i * 16 + 5;
      60        p_init[(N - i - 1) * 16 + 6] = i * 16 + 6;
      61        p_init[(N - i - 1) * 16 + 7] = i * 16 + 7;
      62        p_init[(N - i - 1) * 16 + 8] = i * 16 + 8;
      63        p_init[(N - i - 1) * 16 + 9] = i * 16 + 9;
      64        p_init[(N - i - 1) * 16 + 10] = i * 16 + 10;
      65        p_init[(N - i - 1) * 16 + 11] = i * 16 + 11;
      66        p_init[(N - i - 1) * 16 + 12] = i * 16 + 12;
      67        p_init[(N - i - 1) * 16 + 13] = i * 16 + 13;
      68        p_init[(N - i - 1) * 16 + 14] = i * 16 + 14;
      69        p_init[(N - i - 1) * 16 + 15] = i * 16 + 15;
      70      }
      71    memcpy (pd_src, p_init, N * 16);
      72   
      73    if (__builtin_memcmp (pd_dst, pd_src, N * 2 * sizeof (double)) != 0)
      74      __builtin_abort ();
      75  
      76    if (__builtin_memcmp (pd_dst2, pd_src2, N * 2 * sizeof (double)) != 0)
      77      __builtin_abort ();
      78  
      79    if (__builtin_memcmp (cdf_dst, cdf_src, N * sizeof (cdf)) != 0)
      80      __builtin_abort ();
      81  
      82    if (__builtin_memcmp (cdf2_dst, cdf2_src, N * sizeof (cdf2)) != 0)
      83      __builtin_abort ();
      84  
      85    if (__builtin_memcmp (cdf3_dst, cdf3_src, N * sizeof (cdf3)) != 0)
      86      __builtin_abort ();
      87  
      88    if (__builtin_memcmp (cdf4_dst, cdf4_src, N * sizeof (cdf4)) != 0)
      89      __builtin_abort ();
      90  }