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