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