1145516Sdarrenr/* { dg-do run } */ 2255332Scy/* { dg-require-effective-target avx } */ 3145516Sdarrenr/* { dg-options "-O2 -mavx" } */ 4145516Sdarrenr 5145516Sdarrenr#include "avx-check.h" 6145516Sdarrenr 7255332Scystatic __m256i 8145516Sdarrenr__attribute__((noinline)) 9145516Sdarrenrfoo (long long x, int i) 10145516Sdarrenr{ 11145516Sdarrenr switch (i) 12145516Sdarrenr { 13145516Sdarrenr case 3: 14145516Sdarrenr return _mm256_set_epi64x (x, 0, 0, 0); 15145516Sdarrenr case 2: 16145516Sdarrenr return _mm256_set_epi64x (0, x, 0, 0); 17145516Sdarrenr case 1: 18145516Sdarrenr return _mm256_set_epi64x (0, 0, x, 0); 19145516Sdarrenr case 0: 20145516Sdarrenr return _mm256_set_epi64x (0, 0, 0, x); 21145516Sdarrenr default: 22145516Sdarrenr abort (); 23145516Sdarrenr } 24145516Sdarrenr} 25145516Sdarrenr 26145516Sdarrenrstatic void 27145516Sdarrenravx_test (void) 28153872Sguido{ 29145516Sdarrenr long long e = 0xabadbeef01234567LL; 30145516Sdarrenr long long v[4]; 31145516Sdarrenr union256i_q u; 32145516Sdarrenr int i, j; 33145516Sdarrenr 34145516Sdarrenr for (i = 0; i < ARRAY_SIZE (v); i++) 35145516Sdarrenr { 36145516Sdarrenr for (j = 0; j < ARRAY_SIZE (v); j++) 37145516Sdarrenr v[j] = 0; 38145516Sdarrenr v[i] = e; 39145516Sdarrenr u.x = foo (e, i); 40145516Sdarrenr if (check_union256i_q (u, v)) 41145516Sdarrenr abort (); 42145516Sdarrenr } 43145516Sdarrenr} 44145516Sdarrenr