1 /* PR target/85323 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -mavx512vl -mavx512bw -fdump-tree-optimized" } */
4 /* { dg-final { scan-tree-dump-times "= \{ 0, 0 \};" 6 "optimized" } } */
5 /* { dg-final { scan-tree-dump-times "= \{ 0, 0, 0, 0 \};" 6 "optimized" } } */
6 /* { dg-final { scan-tree-dump-times "= \{ 0, 0, 0, 0, 0, 0, 0, 0 \};" 6 "optimized" } } */
7 
8 #include <x86intrin.h>
9 
10 void
foo(__m128i x[6])11 foo (__m128i x[6])
12 {
13   x[0] = _mm_sllv_epi64 (x[0], _mm_set_epi64x (64, 65));
14   x[1] = _mm_sllv_epi32 (x[1], _mm_set_epi32 (32, 33, 34, 32));
15   x[2] = _mm_sllv_epi16 (x[2], _mm_set_epi16 (16, 18, -16, -1, 19, 16, 18, 20));
16   x[3] = _mm_srlv_epi64 (x[3], _mm_set_epi64x (65, -1));
17   x[4] = _mm_srlv_epi32 (x[4], _mm_set_epi32 (33, 32, 39, -5));
18   x[5] = _mm_srlv_epi16 (x[5], _mm_set1_epi16 (17));
19 }
20 
21 void
bar(__m256i x[6])22 bar (__m256i x[6])
23 {
24   x[0] = _mm256_sllv_epi64 (x[0], _mm256_set_epi64x (64, 65, -2, 66));
25   x[1] = _mm256_sllv_epi32 (x[1], _mm256_set_epi32 (32, 32, 39, -4, -32, 98, 2048, 32));
26   x[2] = _mm256_sllv_epi16 (x[2], _mm256_set_epi16 (16, 32, 64, 128, 16, 16, 32, -5,
27 						    -1, -2, -3, 16, 17, 18, 19, 200));
28   x[3] = _mm256_srlv_epi64 (x[3], _mm256_set_epi64x (65, 64, -5, 64));
29   x[4] = _mm256_srlv_epi32 (x[4], _mm256_set_epi32 (33, 49, 2048, 32, -1, 32, 37, 16384));
30   x[5] = _mm256_srlv_epi16 (x[5], _mm256_set1_epi16 (17));
31 }
32 
33 void
baz(__m512i x[6])34 baz (__m512i x[6])
35 {
36   x[0] = _mm512_sllv_epi64 (x[0], _mm512_set_epi64 (64, 64, 69, -1, 2048, 64, 16348, -64));
37   x[1] = _mm512_sllv_epi32 (x[1], _mm512_set_epi32 (32, 33, 34, 35, 36, -32, -33, -34,
38 						    -1, -2, -3, -4, -5, -6, 32, 2048));
39   x[2] = _mm512_sllv_epi16 (x[2], _mm512_set_epi16 (16, 32, 64, 128, 16, 16, 32, -5,
40 						    -1, -2, -3, 16, 17, 18, 19, 200,
41 						    16, 19, 2048, 16, -2, -8, -19, 16,
42 						    -1, -2, -3, -4, -5, -6, -7, -8));
43   x[3] = _mm512_srlv_epi64 (x[3], _mm512_set_epi64 (65, 64, 69, 68, 64, 79, 2048, -1));
44   x[4] = _mm512_srlv_epi32 (x[4], _mm512_set_epi32 (32, 33, 34, 35, 36, -32, -33, -34,
45 						    -1, -2, -3, -4, -5, -6, 32, 2048));
46   x[5] = _mm512_srlv_epi16 (x[5], _mm512_set1_epi16 (17));
47 }
48