(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr103144-shift-2.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2 -mavx2 -ftree-vectorize -fvect-cost-model=unlimited -mprefer-vector-width=256" } */
       3  /* { dg-require-effective-target avx2 } */
       4  
       5  #include "avx2-check.h"
       6  #include <string.h>
       7  #include "pr103144-shift-1.c"
       8  
       9  typedef int v8si __attribute__((vector_size(32)));
      10  typedef unsigned int v8usi __attribute__((vector_size(32)));
      11  
      12  void
      13  avx2_test (void)
      14  {
      15    int* epi32_exp = (int*) malloc (N * sizeof (int));
      16    int* epi32_dst = (int*) malloc (N * sizeof (int));
      17    unsigned int* epu32_exp = (unsigned int*) malloc (N * sizeof (int));
      18    unsigned int* epu32_dst = (unsigned int*) malloc (N * sizeof (int));
      19  
      20    __builtin_memset (epi32_exp, 0, N * sizeof (int));
      21    int b = 8;
      22    v8si init = __extension__(v8si) { b, b << 1, b << 2, b << 3, b << 4, b << 5, b << 6, b << 7 };
      23  
      24    for (int i = 0; i != N / 8; i++)
      25      {
      26        memcpy (epi32_exp + i * 8, &init, 32);
      27        init <<= 8;
      28      }
      29  
      30    foo_shl (epi32_dst, b);
      31    if (__builtin_memcmp (epi32_dst, epi32_exp, N * sizeof (int)) != 0)
      32      __builtin_abort ();
      33  
      34    foo_shl_peel (epi32_dst, b);
      35    if (__builtin_memcmp (epi32_dst, epi32_exp, 39 * sizeof (int)) != 0)
      36      __builtin_abort ();
      37  
      38    b = -11111;
      39    init = __extension__(v8si) { b, b >> 1, b >> 2, b >> 3, b >> 4, b >> 5, b >> 6, b >> 7 };
      40    for (int i = 0; i != N / 8; i++)
      41      {
      42        memcpy (epi32_exp + i * 8, &init, 32);
      43        init >>= 8;
      44      }
      45  
      46    foo_ashr (epi32_dst, b);
      47    if (__builtin_memcmp (epi32_dst, epi32_exp, N * sizeof (int)) != 0)
      48      __builtin_abort ();
      49  
      50    foo_ashr_peel (epi32_dst, b);
      51    if (__builtin_memcmp (epi32_dst, epi32_exp, 39 * sizeof (int)) != 0)
      52      {
      53        for (int i = 0; i != 39; i++)
      54  	{
      55  	  printf ("epi32_dst[%d] is %d ----", i, epi32_dst[i]);
      56  	  printf ("epi32_exp[%d] is %d\n", i, epi32_exp[i]);
      57  	}
      58           __builtin_abort ();
      59      }
      60  
      61    __builtin_memset (epu32_exp, 0, N * sizeof (int));
      62    unsigned int c = 11111111;
      63    v8usi initu = __extension__(v8usi) { c, c >> 1U, c >> 2U, c >> 3U, c >> 4U, c >> 5U, c >> 6U, c >> 7U };
      64    for (int i = 0; i != N / 8; i++)
      65      {
      66        memcpy (epu32_exp + i * 8, &initu, 32);
      67        initu >>= 8U;
      68      }
      69  
      70    foo_lshr (epu32_dst, c);
      71    if (__builtin_memcmp (epu32_dst, epu32_exp, N * sizeof (int)) != 0)
      72      __builtin_abort ();
      73  
      74    foo_lshr_peel (epu32_dst, c);
      75    if (__builtin_memcmp (epu32_dst, epu32_exp, 39 * sizeof (int)) != 0)
      76      __builtin_abort ();
      77  
      78    return;
      79  }