(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512vl-broadcast-pr87767-2.c
       1  /* PR target/87767 */
       2  /* { dg-do run } */
       3  /* { dg-options "-O2 -mavx512f -mavx512dq -mavx512vl" } */
       4  /* { dg-require-effective-target avx512dq } */
       5  /* { dg-require-effective-target avx512vl } */
       6  
       7  #define AVX512DQ
       8  #define AVX512VL
       9  #include "avx512f-helper.h"
      10  
      11  #include "avx512vl-broadcast-pr87767-1.c"
      12  
      13  #define RTEST(VTYPE, TYPE, N, OP_NAME, OP)		\
      14    do							\
      15      {							\
      16        TYPE exp[N], src[N];				\
      17        VTYPE res;					\
      18        for (int i = 0; i < N; i++)			\
      19  	src[i] = i * i * 107;				\
      20        res = foo_##OP_NAME##_##VTYPE (*(VTYPE*)&src[0]);	\
      21        for (int i = 0; i < N; i ++)			\
      22  	exp[i] = src[i] OP 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, add, +);
      35    RTEST (v4di, long long, 4, add, +);
      36    RTEST (v8sf, float, 8, add, +);
      37    RTEST (v4df, double, 4, add, +);
      38    RTEST (v8si, int, 8, sub, -);
      39    RTEST (v4di, long long, 4, sub, -);
      40    RTEST (v8si, int, 8, mul, *);
      41    RTEST (v4di, long long, 4, mul, *);
      42    RTEST (v8sf, float, 8, mul, *);
      43    RTEST (v4df, double, 4, mul, *);
      44  }
      45  
      46  void
      47  test_128 (void)
      48  {
      49    RTEST (v4si, int, 4, add, +);
      50    RTEST (v2di, long long, 2, add, +);
      51    RTEST (v4sf, float, 4, add, +);
      52    RTEST (v2df, double, 2, add, +);
      53    RTEST (v4si, int, 4, sub, -);
      54    RTEST (v2di, long long, 2, sub, -);
      55    RTEST (v4si, int, 4, mul, *);
      56    RTEST (v2di, long long, 2, mul, *);
      57    RTEST (v4sf, float, 4, mul, *);
      58    RTEST (v2df, double, 2, mul, *);
      59  }