1  /* PR target/87767 */
       2  /* { dg-do run } */
       3  /* { dg-options "-O2 -mavx512f -mavx512vl" } */
       4  /* { dg-require-effective-target avx512vl } */
       5  
       6  #define AVX512VL
       7  #include "avx512f-helper.h"
       8  
       9  #include "avx512vl-broadcast-pr87767-5.c"
      10  
      11  #define RTEST(VTYPE, TYPE, N, OP_NAME, OP1, OP2)				\
      12    do									\
      13      {									\
      14        TYPE exp[N], src[N];						\
      15        VTYPE res;							\
      16        for (int i = 0; i < N; i++)					\
      17  	{								\
      18  	  src[i] = i * i * 107;						\
      19  	}								\
      20        res = foo_##OP_NAME##_##VTYPE (*(VTYPE*)&src[0]);			\
      21        for (int i = 0; i < N; i ++)					\
      22  	exp[i] = (OP1 src[i]) OP2 CONSTANT;				\
      23        for (int j = 0; j < N; j++)					\
      24  	{								\
      25  	  if (res[j] != exp[j])						\
      26  	    abort();							\
      27  	}								\
      28      }									\
      29    while (0)
      30  
      31  void
      32  test_256 (void)
      33  {
      34    RTEST (v8si, int, 8, andnot, ~, &);
      35    RTEST (v4di, long long, 4, andnot, ~, &);
      36    RTEST (v8si, int, 8, and,, &);
      37    RTEST (v4di, long long, 4, and,, &);
      38    RTEST (v8si, int, 8, or,, |);
      39    RTEST (v4di, long long, 4, or,, |);
      40    RTEST (v8si, int, 8, xor,, ^);
      41    RTEST (v4di, long long, 4, xor,, ^);
      42  }
      43  
      44  void
      45  test_128 (void)
      46  {
      47    RTEST (v4si, int, 4, andnot, ~, &);
      48    RTEST (v2di, long long, 2, andnot, ~, &);
      49    RTEST (v4si, int, 4, and,, &);
      50    RTEST (v2di, long long, 2, and,, &);
      51    RTEST (v4si, int, 4, or,, |);
      52    RTEST (v2di, long long, 2, or,, |);
      53    RTEST (v4si, int, 4, xor,, ^);
      54    RTEST (v2di, long long, 2, xor,, ^);
      55  }