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