1264790Sbapt/* { dg-do run } */
2/* { dg-options "-O2 -mavx512f" } */
3/* { dg-require-effective-target avx512f } */
4
5#include "avx512f-check.h"
6
7static __m512i
8__attribute__ ((noinline))
9foo (long long x, int i)
10{
11  switch (i)
12    {
13    case 7:
14      return _mm512_set_epi64 (x, 0, 0, 0, 0, 0, 0, 0);
15    case 6:
16      return _mm512_set_epi64 (0, x, 0, 0, 0, 0, 0, 0);
17    case 5:
18      return _mm512_set_epi64 (0, 0, x, 0, 0, 0, 0, 0);
19    case 4:
20      return _mm512_set_epi64 (0, 0, 0, x, 0, 0, 0, 0);
21    case 3:
22      return _mm512_set_epi64 (0, 0, 0, 0, x, 0, 0, 0);
23    case 2:
24      return _mm512_set_epi64 (0, 0, 0, 0, 0, x, 0, 0);
25    case 1:
26      return _mm512_set_epi64 (0, 0, 0, 0, 0, 0, x, 0);
27    case 0:
28      return _mm512_set_epi64 (0, 0, 0, 0, 0, 0, 0, x);
29    default:
30      abort ();
31    }
32}
33
34static __m512i
35__attribute__ ((noinline))
36foo_r (long long x, int i)
37{
38  switch (i)
39    {
40    case 0:
41      return _mm512_setr_epi64 (x, 0, 0, 0, 0, 0, 0, 0);
42    case 1:
43      return _mm512_setr_epi64 (0, x, 0, 0, 0, 0, 0, 0);
44    case 2:
45      return _mm512_setr_epi64 (0, 0, x, 0, 0, 0, 0, 0);
46    case 3:
47      return _mm512_setr_epi64 (0, 0, 0, x, 0, 0, 0, 0);
48    case 4:
49      return _mm512_setr_epi64 (0, 0, 0, 0, x, 0, 0, 0);
50    case 5:
51      return _mm512_setr_epi64 (0, 0, 0, 0, 0, x, 0, 0);
52    case 6:
53      return _mm512_setr_epi64 (0, 0, 0, 0, 0, 0, x, 0);
54    case 7:
55      return _mm512_setr_epi64 (0, 0, 0, 0, 0, 0, 0, x);
56    default:
57      abort ();
58    }
59}
60
61static void
62avx512f_test (void)
63{
64  long long e = 0xabadbeef01234567LL;
65  long long v[8];
66  union512i_q res;
67  int i, j;
68
69  for (i = 0; i < 8; i++)
70    {
71      for (j = 0; j < 8; j++)
72	v[j] = 0;
73      v[i] = e;
74
75      res.x = foo (e, i);
76
77      if (check_union512i_q (res, v))
78	abort ();
79
80      res.x = _mm512_setzero_si512 ();
81
82      res.x = foo_r (e, i);
83
84      if (check_union512i_q (res, v))
85	abort ();
86    }
87}
88